Ejemplo n.º 1
0
        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;
            }
            }
        }