同时录制来自两个输入设备的音频并保存到波形文件中?
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);
【讨论】:
以上是关于同时录制来自两个输入设备的音频并保存到波形文件中?的主要内容,如果未能解决你的问题,请参考以下文章