protected override void WritePcm8(aBinaryWriter writer) { mReader.Goto(0); switch (mFormat) { case WaveFormat.Pcm8: { writer.WriteS8s(mReader.ReadS8s(mSampleCount)); break; } case WaveFormat.Pcm16: { for (var i = 0; i < mSampleCount; ++i) { sbyte pcm8; Waveform.Pcm16toPcm8(mReader.ReadS16(), out pcm8); writer.WriteS8(pcm8); } break; } case WaveFormat.Adpcm2: { var pcm8 = new sbyte[16]; var pcm16 = new short[16]; int last = 0, penult = 0; for (var i = 0; i < mSampleCount; i += 16) { Waveform.Adpcm2toPcm16(mReader.Read8s(5), pcm16, ref last, ref penult); for (var j = 0; j < 16; ++j) { Waveform.Pcm16toPcm8(pcm16[j], out pcm8[j]); } writer.WriteS8s(pcm8, System.Math.Min(16, (mSampleCount - i))); } break; } case WaveFormat.Adpcm4: { var pcm8 = new sbyte[16]; var pcm16 = new short[16]; int last = 0, penult = 0; for (var i = 0; i < mSampleCount; i += 16) { Waveform.Adpcm4toPcm16(mReader.Read8s(9), pcm16, ref last, ref penult); for (var j = 0; j < 16; ++j) { Waveform.Pcm16toPcm8(pcm16[j], out pcm8[j]); } writer.WriteS8s(pcm8, System.Math.Min(16, (mSampleCount - i))); } break; } } }