Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }