/// <summary> /// Ducks all sounds with a priority lower than the one passed. /// </summary> /// <param name="DuckPri">The ducking priority under which to duck other sounds.</param> public void Duck(HITDuckingPriorities DuckPri) { for (int i = 0; i < Threads.Count; i++) { //0 means least importance, so it gets ducked. if (Threads[i].DuckPriority < DuckPri) { switch (DuckPri) { case HITDuckingPriorities.duckpri_low: Threads[i].SetVolume(0.15f, Threads[i].Pan); break; case HITDuckingPriorities.duckpri_normal: Threads[i].SetVolume(0.25f, Threads[i].Pan); break; case HITDuckingPriorities.duckpri_high: Threads[i].SetVolume(0.45f, Threads[i].Pan); break; case HITDuckingPriorities.duckpri_higher: Threads[i].SetVolume(0.65f, Threads[i].Pan); break; case HITDuckingPriorities.duckpri_evenhigher: //Threads[i].SetVolume(0.85f, Threads[i].Pan); //If ducking priority is duckpri_never, it shouldn't be ducked! break; } } } }
/// <summary> /// Creates a new track. /// </summary> /// <param name="Filedata">The data to create the track from.</param> public Track(byte[] Filedata) { BinaryReader Reader = new BinaryReader(new MemoryStream(Filedata)); MagicNumber = new string(Reader.ReadChars(4)); if (MagicNumber == "2DKT") { TWODKT = true; } int CurrentVal = 8; string data; if (!TWODKT) { data = new string(Reader.ReadChars(Filedata.Length)); } else { data = new string(Reader.ReadChars(Reader.ReadInt32())); } string[] Values = data.Split(','); //MagicNumber = Values[0]; Version = ParseHexString(Values[1]); TrackName = Values[2]; SoundID = ParseHexString(Values[3]); TrackID = ParseHexString(Values[4]); if (Values[5] != "\r\n" && Values[5] != "ETKD" && Values[5] != "") //some tracks terminate here... { ArgType = (HITArgs)ParseHexString(Values[5]); ControlGroup = (HITControlGroups)ParseHexString(Values[7]); if (Version == 2) { CurrentVal++; } CurrentVal += 3; //skip two unknowns and clsid DuckingPriority = (HITDuckingPriorities)ParseHexString(Values[CurrentVal]); CurrentVal++; Looped = ParseHexString(Values[CurrentVal]); LoopDefined = true; CurrentVal++; Volume = ParseHexString(Values[CurrentVal]); } Reader.Close(); }
private bool TWODKT = false; //Optional encoding as Pascal string, typical Maxis... #endregion Fields #region Constructors /// <summary> /// Creates a new track. /// </summary> /// <param name="Filedata">The data to create the track from.</param> public Track(byte[] Filedata) { BinaryReader Reader = new BinaryReader(new MemoryStream(Filedata)); MagicNumber = new string(Reader.ReadChars(4)); if(MagicNumber == "2DKT") TWODKT = true; int CurrentVal = 8; string data; if(!TWODKT) data = new string(Reader.ReadChars(Filedata.Length)); else data = new string(Reader.ReadChars(Reader.ReadInt32())); string[] Values = data.Split(','); //MagicNumber = Values[0]; Version = ParseHexString(Values[1]); TrackName = Values[2]; SoundID = ParseHexString(Values[3]); TrackID = ParseHexString(Values[4]); if (Values[5] != "\r\n" && Values[5] != "ETKD" && Values[5] != "") //some tracks terminate here... { ArgType = (HITArgs)ParseHexString(Values[5]); ControlGroup = (HITControlGroups)ParseHexString(Values[7]); if (Version == 2) CurrentVal++; CurrentVal += 2; DuckingPriority = (HITDuckingPriorities)ParseHexString(Values[CurrentVal]); CurrentVal++; Looped = ParseHexString(Values[CurrentVal]); CurrentVal++; Volume = ParseHexString(Values[CurrentVal]); } Reader.Close(); }