コード例 #1
0
        public void Submit(SampleCollection samples)
        {
            if (!samples.IsLast)
            {
                // Filter by ReplayGain, depending on settings:
                _replayGainFilterLifetime.Value.Submit(samples);

                // Request an unmanaged buffer, then copy the samples to it:
                var buffers = new IntPtr[samples.Channels];
                Marshal.Copy(_encoder.GetBuffer(samples.SampleCount), buffers, 0, buffers.Length);

                for (var i = 0; i < samples.Channels; i++)
                {
                    Marshal.Copy(samples[i], 0, buffers[i], samples[i].Length);
                }
            }

            _encoder.Wrote(samples.SampleCount);

            while (_encoder.BlockOut())
            {
                _encoder.Analysis(IntPtr.Zero);
                _encoder.AddBlock();

                OggPacket packet;
                while (_encoder.FlushPacket(out packet))
                {
                    _oggStream.PacketIn(ref packet);

                    OggPage page;
                    while (_oggStream.PageOut(out page))
                    {
                        WritePage(page, _output);
                    }
                }
            }
        }