NAudio记录并保存麦克风输入和扬声器输出

时间:2019-06-06 12:38:01

标签: c# naudio

我想通过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:尝试创建MixingSampleProvider时,“所有混合器输入必须具有相同的WaveFormat”。

我想知道我是否使用正确的方式录制两种音频?另外,如果有一种方法可以将两个音频都记录在一个文件中,那将是很好的,但是我不确定是否可以。

1 个答案:

答案 0 :(得分:0)

  

所有混频器输入必须具有相同的WaveFormat

提示您没有。

更改行

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

waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;

因此,现在您将对麦克风和扬声器使用相同的格式,并且调音台应该没问题。