【问题标题】: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 的位置。如果您描述您“没有得到”的内容,也会有所帮助。您是否看到错误,或者...?
  • 是的,在两个文件上接收相同的音频

标签: c# naudio


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    相关资源
    最近更新 更多