使用Naudio库同时记录多个USB麦克风



我编写了代码,使用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,这可能使您的任务不可能。

最新更新