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

Posted

技术标签:

【中文标题】NAudio 记录和保存麦克风输入和扬声器输出【英文标题】:NAudio record and save microphone input and speaker output 【发布时间】:2019-06-06 12:38:01 【问题描述】:

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

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

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

【问题讨论】:

最简单的方法是打开您刚刚创建的两个文件,然后使用您发送的 Naudio 文档中的指南将它们混合。 @Fons 我的错,我不够清楚。我已经编辑了我的问题,所以你可以看到我的问题在哪里。 你试过了吗:waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat; @Fildor 谢谢,这正是我所需要的,就像一个魅力。 【参考方案1】:

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

提示你的没有。

换行

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

waveSourceMic.WaveFormat = waveSourceSpeakers.WaveFormat;

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

【讨论】:

以上是关于NAudio 记录和保存麦克风输入和扬声器输出的主要内容,如果未能解决你的问题,请参考以下文章

如果扬声器远离麦克风,Google Speech/NAudio 会有很大的延迟

iOS中的麦克风输入到扬声器输出?

C# 中的麦克风到扬声器音频流

如何同时使用 NAudio 生成信号和录音?

iOS8 AVAudioEngine 如何将麦克风输入路由到(底部)扬声器输出?

在Android上无需电缆即可将扬声器输出到麦克风输入?