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 同时录制和播放的主要内容,如果未能解决你的问题,请参考以下文章