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

NAudio record and save microphone input and speaker output

我想通过 Skype 或类似应用程序录制对话(这些录音将在保存后进行处理)。我试图用 NAudio 来实现这一点。

到目前为止,我设法使用 WasapiLoopbackCapture 录制扬声器音频并将其保存为 WAV 文件,我还设法使用 WaveIn 录制和保存麦克风音频。主要问题是我不能将这 2 个文件混合成一个文件,如下所述 link: 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);
      }

我在尝试创建 MixingSampleProvider 时收到此异常:System.ArgumentException:'All mixer inputs must have the same WaveFormat'。

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

All mixer inputs must have the same WaveFormat

提示你的没有。

换行

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

waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;

所以,现在您将对麦克风和扬声器使用相同的格式,混音器应该没问题。