NAudio поток данных с плавающей точкой - PullRequest
0 голосов
/ 26 марта 2020

Я хочу использовать NAudio для потоковой передачи аудиоданных. Я понял, что вы можете использовать IWaveProvider следующим образом:

    public abstract class WaveProviderFloat : IWaveProvider
    {
        private WaveFormat m_WaveFormat;

        protected WaveProviderFloat()
        {
            SetWaveFormat(48000, 2);
        }

        protected WaveProviderFloat(int aSampleRate, int aChannels)
        {
            SetWaveFormat(aSampleRate, aChannels);
        }

        public void SetWaveFormat(int aSampleRate, int aChannels)
        {
            this.m_WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(aSampleRate, aChannels);
        }

        public int Read(byte[] aBuffer, int aOffset, int aCount)
        {
            WaveBuffer waveBuffer = new WaveBuffer(aBuffer);
            int samplesRequired = aCount / 4;
            int samplesRead = Read(waveBuffer.FloatBuffer, aOffset / 4, samplesRequired);
            return samplesRead * 4;
        }

        public abstract int Read(float[] aBuffer, int aOffset, int aSampleCount);

        public WaveFormat WaveFormat => m_WaveFormat;
    }

И в вашей программе вы можете инициализировать его так:

        var testFloatProvider = new TestFloatProvider();
        var waveOut = new WaveOut();
        waveOut.Init(testFloatProvider);
        waveOut.Play();

Это пока правильно? У меня есть только одна проблема с блоком чтения, где всегда создается новый WaveBuffer:

WaveBuffer waveBuffer = new WaveBuffer(aBuffer);

Я не совсем понимаю, почему я должен делать это таким образом. Как насчет производительности и сбора мусора здесь? Спасибо за ответы.

...