protected override void WritePcm16(aBinaryWriter writer) { mReader.Goto(0); switch (mFormat) { case WaveFormat.Pcm8: { for (var i = 0; i < mSampleCount; ++i) { short pcm16; Waveform.Pcm8toPcm16(mReader.ReadS8(), out pcm16); writer.WriteS16(pcm16); } break; } case WaveFormat.Pcm16: { writer.WriteS16s(mReader.ReadS16s(mSampleCount)); break; } case WaveFormat.Adpcm2: { 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); writer.WriteS16s(pcm16, System.Math.Min(16, (mSampleCount - i))); } break; } case WaveFormat.Adpcm4: { 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); writer.WriteS16s(pcm16, System.Math.Min(16, (mSampleCount - i))); } break; } } }