/// <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(); }