NAudio Asio同时录制和播放

时间:2018-05-07 16:52:16

标签: c# audio naudio asio

tl; dr 我想将asio_DataAvailable(object sender, AsioAudioAvailableEventArgs e)事件中的数据放入BufferedWaveProvider并播放。

您好,

我正在尝试创建一个应用程序,它会将音频录制到文件中,但也会在录制时将其播放回用户。我设法使用WaveInEvent和WaveOutEvent以及BufferedWaveProvider。但我认为ASIO会有更好的延迟,所以我想用它来做同样的事情。

我在这里找到了关于这个主题的问题,但没有一个包含完整的答案,我无法根据它们解决问题。你能发一个完整的代码示例吗?

NAudio Asio Record and Playback

How to record and playback with NAudio using AsioOut

我尝试使用Marshal.Copy版本,但得到了IndexOutOfRangeException。缓冲区(e.InputBuffers[i])似乎没有足够的样本。我还希望进一步处理音频(将其保存到文件中)并同时播放另一个音频(使用MixingSampleProvider),所以只是简单地复制缓冲区可能对我不起作用。

1 个答案:

答案 0 :(得分:0)

ASIO驱动程序模型基于单个回调,您可以在其中访问记录的缓冲区并写入回放缓冲区。这非常适合超低延迟播放,但InputBuffers只是每个通道的块非托管内存的IntPtrs。因此,该数组的大小是输入通道的数量,而不是样本的数量。您需要了解指针解除引用和位操作才能成功使用它们,因为ASIO支持多种不同的位深度和样本格式,如果您想要访问这样的低级音频,则必须使用正确的一种。