我编写了代码,使用3个waveinevent实例从3个USB麦克风获取麦克风录制。
waveIn.DataAvailable += OnDataAvailable;
waveIn.RecordingStopped += OnRecordingStopped;
waveIn.StartRecording();
waveIn2.DataAvailable += OnDataAvailable2;
waveIn2.RecordingStopped += OnRecordingStopped;
waveIn2.StartRecording();
在我的ondataavailable中,我只能写作wav文件
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
}
我尝试操纵缓冲尺寸,但并未真正解决延迟问题。我如何测试这是我将麦克风彼此放置并记录,如果我从这些数据中运行互相关,理想情况下,我应该获得〜0个样本滞后。
如果我可以从"同时"获得多个麦克风的所有信号,而不同的麦克风之间没有延迟,那将是理想的选择。但是,我注意到不同麦克风之间的样本延迟很少。
我知道,对于不需要/低延迟的这种应用程序,naudio并不是可取的。我想知道我是否可以通过使用Wasapi进一步减少不同的USB MIC之间的延迟,或者您是否建议使用其他库...
在我的经验中,USB音频设备的延迟随设备类型,驱动程序甚至USB端口而变化。因此,您可能需要调整潜伏期才能完美。
使用BufferedWaveProvider可能是可能的。在您的Wave_DataAvailable中将数据写入它。您可以调整每个缓冲波提供商的缓冲尺寸,从而调整其延迟。也许您可以调整不同的延迟以同步您的麦克风。
当然,您可能会遇到与调整波蛋白缓冲区相同的问题。在CLR中运行的语言(如C#)是非确定性的,时间不确定性为10-20ms,这可能使您的任务不可能。