同时录制来自两个输入设备的音频并保存到波形文件中?

Posted

技术标签:

【中文标题】同时录制来自两个输入设备的音频并保存到波形文件中?【英文标题】:Record audio from two input device at the same time and save into wave file? 【发布时间】:2019-08-13 11:34:14 【问题描述】:

我正在尝试同时在两个不同的设备上录制音频,文件的输出应保存在波形文件中

我尝试使用 NAudio 解决问题,如下所示,但仍然没有得到它

WaveInEvent waveSource1 = new WaveInEvent();
waveSource1.DeviceNumber = DeviceID1;
waveSource1.WaveFormat = new WaveFormat(44100, 2);
waveSource1.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
string tempFile1 = (@"C:\Users\Nirmalkumar\Desktop\speech1.wav");
waveFile1 = new WaveFileWriter(tempFile1, waveSource1.WaveFormat);
waveSource.StartRecording();
waveSource1.StartRecording();
Console.Beep();
int milliseconds = 5000;
Thread.Sleep(milliseconds);

waveSource.StopRecording();
waveSource1.StopRecording();

这是第一个波源

WaveInEvent waveSource = new WaveInEvent();
    waveSource.DeviceNumber = DeviceID;
    waveSource.WaveFormat = new WaveFormat(44100, 16, 2);
    waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
    string tempFile = (@"C:\Users\Nirmalkumar\Desktop\speech.wav");
    waveFile = new WaveFileWriter(tempFile, waveSource.WaveFormat);

static void waveSource_DataAvailable(object sender, WaveInEventArgs e)

    waveFile.Write(e.Buffer, 0, e.BytesRecorded);


【问题讨论】:

你能告诉我们你到目前为止所做的尝试吗? 添加了代码。 这就是全部代码吗?您还没有显示您创建wavesource 的位置。我们只能看到您创建wavesource1 的位置。如果您描述您“没有得到”的内容,也会有所帮助。您是否看到错误,或者...? 是的,在两个文件上接收相同的音频 【参考方案1】:

我不熟悉naudio,但是...

看起来您的两个波源都使用相同的dataAvailable 事件处理程序。这意味着无论source 还是source1 接收到音频,它最终都会将数据写入同一个文件。

解决此问题的一种方法是将它们分开,因此每个都有自己的事件处理程序,然后每个都写入一个唯一的文件

WaveInEvent waveSource = new WaveInEvent();
...
waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
string tempFile = (@"C:\Users\Nirmalkumar\Desktop\speech.wav");
waveFile = new WaveFileWriter(tempFile, waveSource.WaveFormat);

WaveInEvent waveSource1 = new WaveInEvent();
...
waveSource1.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource1_DataAvailable);
string tempFile1 = (@"C:\Users\Nirmalkumar\Desktop\speech1.wav");
waveFile1 = new WaveFileWriter(tempFile1, waveSource1.WaveFormat);

然后你的事件处理程序:

static void waveSource_DataAvailable(object sender, WaveInEventArgs e)

    waveFile.Write(e.Buffer, 0, e.BytesRecorded);


static void waveSource1_DataAvailable(object sender, WaveInEventArgs e)

    waveFile1.Write(e.Buffer, 0, e.BytesRecorded);

【讨论】:

以上是关于同时录制来自两个输入设备的音频并保存到波形文件中?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NAudio 录制音频并在麦克风输入静音时写入文件

无法使用 XMLHttpRequest 绘制音频文件的波形

在iOS中绘制录音音频波形图

在不录制的情况下监控 iPhone 上的音频输入?

无法用 pyaudio 录制多个波形(无默认输出设备)

录制音频并保存到文档目录后无法使用 AVAudioPlayer 播放音频文件