使用NAudio库同时录制多个USB麦克风

使用NAudio库同时录制多个USB麦克风,usb,microphone,naudio,cross-correlation,Usb,Microphone,Naudio,Cross Correlation,我编写了使用3个WaveInEvent实例从3个USB麦克风获取麦克风录音的代码 waveIn.DataAvailable += OnDataAvailable; waveIn.RecordingStopped += OnRecordingStopped; waveIn.StartRecording(); waveIn2.DataAvailable += OnDataAvailable2; waveIn2.Reco

我编写了使用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麦克风之间的延迟,或者您是否建议使用其他库…

根据我的经验,USB音频设备的延迟随设备类型、驱动程序甚至USB端口的不同而不同。因此,您可能需要调整延迟以实现完美匹配

这可以通过BufferedWaveProvider实现。 将数据写入waveIn_DataAvailable中。您可以调整每个缓冲波提供程序的缓冲区大小,从而调整其延迟。也许你可以调整不同的延迟来同步你的麦克风

当然,您可能会遇到与调整waveIn缓冲区相同的问题。在CLR(如C)中运行的语言是不确定的,时间不确定性为10-20ms,这可能会使您的任务变得不可能