public AudioEngine(string settingsFile, TimeSpan lookAheadTime, string rendererId) { using (FileStream fileStream = File.OpenRead(settingsFile)) { using (BinaryReader reader = new BinaryReader((Stream)fileStream)) { if ((int)reader.ReadUInt32() != 1179862872) { throw new ArgumentException("XGS format not recognized"); } uint num1 = (uint)reader.ReadUInt16(); uint num2 = (uint)reader.ReadUInt16(); uint num3 = (uint)reader.ReadUInt16(); reader.ReadUInt32(); reader.ReadUInt32(); int num4 = (int)reader.ReadByte(); uint count1 = (uint)reader.ReadUInt16(); uint count2 = (uint)reader.ReadUInt16(); int num5 = (int)reader.ReadUInt16(); int num6 = (int)reader.ReadUInt16(); uint num7 = (uint)reader.ReadUInt16(); uint num8 = (uint)reader.ReadUInt16(); uint num9 = (uint)reader.ReadUInt16(); uint num10 = reader.ReadUInt32(); uint num11 = reader.ReadUInt32(); int num12 = (int)reader.ReadUInt32(); reader.ReadUInt32(); int num13 = (int)reader.ReadUInt32(); reader.ReadUInt32(); uint num14 = reader.ReadUInt32(); uint num15 = reader.ReadUInt32(); uint num16 = reader.ReadUInt32(); reader.ReadUInt32(); reader.ReadUInt32(); reader.BaseStream.Seek((long)num14, SeekOrigin.Begin); string[] strArray1 = AudioEngine.readNullTerminatedStrings(count1, reader); this.categories = new AudioCategory[(IntPtr)count1]; reader.BaseStream.Seek((long)num10, SeekOrigin.Begin); for (int index = 0; (long)index < (long)count1; ++index) { this.categories[index] = new AudioCategory(this, strArray1[index], reader); this.categoryLookup.Add(strArray1[index], index); } reader.BaseStream.Seek((long)num15, SeekOrigin.Begin); string[] strArray2 = AudioEngine.readNullTerminatedStrings(count2, reader); this.variables = new AudioEngine.Variable[(IntPtr)count2]; reader.BaseStream.Seek((long)num11, SeekOrigin.Begin); for (int index = 0; (long)index < (long)count2; ++index) { this.variables[index].name = strArray2[index]; byte num17 = reader.ReadByte(); this.variables[index].isPublic = ((int)num17 & 1) != 0; this.variables[index].isReadOnly = ((int)num17 & 2) != 0; this.variables[index].isGlobal = ((int)num17 & 4) == 0; this.variables[index].isReserved = ((int)num17 & 8) != 0; this.variables[index].initValue = reader.ReadSingle(); this.variables[index].minValue = reader.ReadSingle(); this.variables[index].maxValue = reader.ReadSingle(); this.variables[index].value = this.variables[index].initValue; this.variableLookup.Add(strArray2[index], index); } this.rpcCurves = new AudioEngine.RpcCurve[(IntPtr)num7]; reader.BaseStream.Seek((long)num16, SeekOrigin.Begin); for (int index1 = 0; (long)index1 < (long)num7; ++index1) { this.rpcCurves[index1].variable = (int)reader.ReadUInt16(); int length = (int)reader.ReadByte(); this.rpcCurves[index1].parameter = (AudioEngine.RpcParameter)reader.ReadUInt16(); this.rpcCurves[index1].points = new AudioEngine.RpcPoint[length]; for (int index2 = 0; index2 < length; ++index2) { this.rpcCurves[index1].points[index2].x = reader.ReadSingle(); this.rpcCurves[index1].points[index2].y = reader.ReadSingle(); this.rpcCurves[index1].points[index2].type = (AudioEngine.RpcPointType)reader.ReadByte(); } } } } }