Naudio WasapiLoopbackCapture Запись с разделением каналов - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь записать 32-битное стерео, 48000 Гц от моего выхода, используя WasapiLoopbackCapture NAudio в 2 отдельных файла канала.Поэтому я хочу иметь что-то вроде channel1.wav & channel2.wav

Что я пробовал по этой ссылке

    public List<RecordingResult> SplitStereoRecordingByTalkUnit()
    {
        wasapiIn = new WasapiLoopbackCapture();
        wasapiIn.DataAvailable += wi_DataAvailable
        _writers = new WaveFileWriter[wasapiIn.WaveFormat.Channels];

        for (int n = 0; n < _writers.Length; n++)
        {
            var format = new WaveFormat(wasapiIn.WaveFormat.SampleRate, wasapiIn.WaveFormat.BitsPerSample, 1);
            _writers[n] = new WaveFileWriter(String.Format("channel{0}.wav", n + 1), format);
        }
        wasapiIn.StartRecording();

        return output;
    }

        void wi_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (e.BytesRecorded != 0)
            {
                int offset = 0;
                while (offset < e.BytesRecorded)
                {
                    for (int n = 0; n < wasapiIn.WaveFormat.Channels; n++)
                    {
                        _writers[n].Write(e.Buffer, offset, 4);
                        _writers[n].Flush();
                        offset += 4;
                    }
                }
            }
        }

Я тоже уже пытался использовать MultiplexingWaveProvider в сочетании с BufferedWaveProvider, которые используют функцию addSample().

Все это приводит к плохой шумной записи.

Что мне делать?

ОБНОВЛЕНИЕ: Этот код работает на 16 битах, изменяет только смещение смещения на 2 и считывание буфера на 2

...