NAudio записывает и сохраняет микрофонный вход и выход динамика - PullRequest
0 голосов
/ 06 июня 2019

Я хочу записывать разговоры через Skype или аналогичные приложения (эти записи будут обработаны после сохранения). Я пытался добиться этого с помощью NAudio.

До сих пор мне удавалось записывать звук колонок с помощью WasapiLoopbackCapture и сохранять его в файл WAV, также мне удавалось записывать и сохранять звук микрофона с помощью WaveIn. Основная проблема заключается в том, что я не могу смешать эти 2 файла в один файл, как указано в следующей ссылке: https://github.com/naudio/NAudio/blob/master/Docs/MixTwoAudioFilesToWav.md

Функция, с которой я начинаю свою запись, выглядит следующим образом:

        waveSourceSpeakers = new WasapiLoopbackCapture();
        string outputFilePath = @"xxxx\xxx\xxx";

        waveFileSpeakers = new WaveFileWriter(outputFilePath, waveSourceSpeakers.WaveFormat);

        waveSourceSpeakers.DataAvailable += (s, a) =>
        {
            waveFileSpeakers.Write(a.Buffer, 0, a.BytesRecorded);
        };

        waveSourceSpeakers.RecordingStopped += (s, a) =>
        {
            waveFileSpeakers.Dispose();
            waveFileSpeakers = null;
            waveSourceSpeakers.Dispose();
        };

        waveSourceSpeakers.StartRecording();

        waveSourceMic = new WaveIn();
        waveSourceMic.WaveFormat = new WaveFormat(44100, 1);

        waveSourceMic.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
        waveSourceMic.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);

        waveFileMic = new WaveFileWriter(@"xxxx\xxx\xxx", waveSourceMic.WaveFormat);

        waveSourceMic.StartRecording();

Функция, в которой я пытаюсь смешать 2 файла wav, выглядит следующим образом:

      using (var reader1 = new AudioFileReader(@"xxx\xxx\file1.wav"))
      using (var reader2 = new AudioFileReader(@"xxx\xxx\file2.wav"))
      {
                var mixer = new MixingSampleProvider(new[] { reader1, reader2 });
                WaveFileWriter.CreateWaveFile16(@"xxxx\xxx\mixed.wav", mixer);
      }

и я получаю это исключение: System.ArgumentException: «Все входы микшера должны иметь одинаковый WaveFormat» при попытке создать MixingSampleProvider.

Мне было интересно, правильно ли я пишу обе аудиозаписи? Кроме того, было бы здорово, если бы есть возможность записать обе аудиозаписи в один файл, но я не уверен, возможно ли это.

1 Ответ

1 голос
/ 07 июня 2019

Все входы микшера должны иметь одинаковый WaveFormat

намекает на то, что ваш нет.

Изменить строку

waveSourceMic.WaveFormat = new WaveFormat(44100, 1);

до

waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;

Итак, теперь вы будете использовать один и тот же формат для микрофона и динамиков, и микшер должен быть в порядке.

...