NAudio Asio 同时录制和播放

Posted

技术标签:

【中文标题】NAudio Asio 同时录制和播放【英文标题】:NAudio Asio Record and Playback at the same time 【发布时间】:2018-05-07 16:52:16 【问题描述】:

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】:

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

【讨论】:

以上是关于NAudio Asio 同时录制和播放的主要内容,如果未能解决你的问题,请参考以下文章

NAudio Asio 录制和播放

NAudio Asio 录制播放和保存(仅限噪音)

NAudio:使用 ASIO 录制音频并用吉他输出

C# NAudio asio 和 wasapi

如何同时使用 NAudio 生成信号和录音?

如何使用 NAudio 和 ASIO 直接读取输入缓冲区和播放?