public static RwavChannelInfo Read(BinaryReader reader, int baseOffset) { var info = new RwavChannelInfo { AudioDataOffset = reader.ReadInt32(), AdpcmInfoOffset = reader.ReadInt32(), VolumeFrontRight = reader.ReadInt32(), VolumeFrontLeft = reader.ReadInt32(), VolumeBackRight = reader.ReadInt32(), VolumeBackLeft = reader.ReadInt32() }; reader.BaseStream.Position = baseOffset + info.AdpcmInfoOffset; var channel = new GcAdpcmChannelInfo { Coefs = Enumerable.Range(0, 16).Select(x => reader.ReadInt16()).ToArray(), Gain = reader.ReadInt16(), Start = new GcAdpcmContext(reader), Loop = new GcAdpcmContext(reader) }; info.AdpcmInfo = channel; return(info); }
public static RwavWaveInfo ReadBrwav(BinaryReader reader) { int baseOffset = (int)reader.BaseStream.Position; var info = new RwavWaveInfo(); info.Codec = (NwCodec)reader.ReadByte(); info.Looping = reader.ReadBoolean(); info.ChannelCount = reader.ReadByte(); reader.BaseStream.Position++; info.SampleRate = reader.ReadUInt16(); reader.BaseStream.Position += 2; info.LoopStart = GcAdpcmMath.NibbleToSample(reader.ReadInt32()); info.SampleCount = GcAdpcmMath.NibbleToSample(reader.ReadInt32()); info.ChannelInfoOffset = reader.ReadInt32(); info.InfoStructureLength = reader.ReadInt32(); var channelInfoOffsets = new int[info.ChannelCount]; reader.BaseStream.Position = baseOffset + info.ChannelInfoOffset; for (int i = 0; i < info.ChannelCount; i++) { channelInfoOffsets[i] = reader.ReadInt32(); } for (int i = 0; i < info.ChannelCount; i++) { reader.BaseStream.Position = baseOffset + channelInfoOffsets[i]; RwavChannelInfo channel = RwavChannelInfo.Read(reader, baseOffset); info.Channels.Add(channel); } return(info); }