Example #1
0
        void PerformWavToStream(Stream instream, Stream outstream)
        {
            var mixer    = new MicrosoftWaveMixer(instream);
            var writer   = new aBinaryWriter(outstream, Endianness.Big);
            var dataSize = 0;

            switch (mStreamFormat)
            {
            case StreamFormat.Pcm: dataSize = (mixer.SampleCount * 4); break;

            case StreamFormat.Adpcm: dataSize = (mareep.RoundUp16B(mixer.SampleCount) / 16 * 18); break;
            }

            writer.WriteS32(dataSize);
            writer.WriteS32(mixer.SampleCount);
            writer.Write16((ushort)mixer.SampleRate);
            writer.Write16((ushort)mStreamFormat);
            writer.Write16(0);                                   // unused
            writer.Write16((ushort)mStreamFrameRate);
            writer.WriteS32(mStreamLoop ? 1 : 0);                // loop flag
            writer.WriteS32(mStreamLoop ? mStreamLoopStart : 0); // loop start
            writer.WritePadding(32, 0);

            switch (mStreamFormat)
            {
            case StreamFormat.Pcm: EncodeStreamPcm(mixer, writer); break;

            case StreamFormat.Adpcm: EncodeStreamAdpcm(mixer, writer); break;
            }

            writer.WritePadding(32, 0);
        }
Example #2
0
        void PerformWavToRaw(Stream instream, Stream outstream)
        {
            var mixer  = new MicrosoftWaveMixer(instream);
            var writer = new aBinaryWriter(outstream, Endianness.Big);

            mixer.MixerMode = mMixerMode;
            mixer.Write(mRawOutputFormat, writer);
        }
Example #3
0
        static void EncodeStreamPcm(MicrosoftWaveMixer mixer, aBinaryWriter writer)
        {
            short left, right;

            for (var i = 0; i < mixer.SampleCount; ++i)
            {
                mixer.ReadPcm16(i, out left, out right);
                writer.WriteS16(left);
                writer.WriteS16(right);

                if ((i % cMessageInterval) == 0 || i >= mixer.SampleCount)
                {
                    mareep.WriteMessage("\rSamples encoded: {0}/{1}", System.Math.Min((i + 1), mixer.SampleCount), mixer.SampleCount);
                }
            }
        }
Example #4
0
        static void EncodeStreamAdpcm(MicrosoftWaveMixer mixer, aBinaryWriter writer)
        {
            var left_adpcm4 = new byte[9];
            int left_last = 0, left_penult = 0;

            var right_adpcm4 = new byte[9];
            int right_last = 0, right_penult = 0;

            var left  = new short[16];
            var right = new short[16];

            for (var i = 0; i < mixer.SampleCount; i += 16)
            {
                for (var j = 0; j < 16; ++j)
                {
                    if ((i + j) < mixer.SampleCount)
                    {
                        mixer.ReadPcm16((i + j), out left[j], out right[j]);
                    }
                    else
                    {
                        left[j]  = 0;
                        right[j] = 0;
                    }
                }

                Waveform.Pcm16toAdpcm4(left, left_adpcm4, ref left_last, ref left_penult);
                Waveform.Pcm16toAdpcm4(right, right_adpcm4, ref right_last, ref right_penult);

                writer.Write8s(left_adpcm4);
                writer.Write8s(right_adpcm4);

                if ((i % cMessageInterval) == 0 || (i + 16) >= mixer.SampleCount)
                {
                    mareep.WriteMessage("\rSamples encoded: {0}/{1}", System.Math.Min((i + 16), mixer.SampleCount), mixer.SampleCount);
                }
            }
        }