繁体   English   中英

C ++中的实时音频处理

[英]real time audio processing in C++

我想生产一种软件,该软件可以从外部音频接口(Focusrite Scarlett 2i2)读取原始音频,并在返回到接口进行播放之前用C ++处理它。 我目前正在运行Windows 8,并且想知道如何以最小的延迟做到这一点?

我花了一段时间研究(增强)ASIO,但是文档似乎相当差。 我也一直在考虑OpenCL,但有人告诉我OpenCL很可能具有更高的延迟。 理想情况下,我希望能够直接访问Focusrite驱动程序。

很抱歉,这是一个悬而未决的问题,但是我一直在寻找有关音频编程的教学材料时遇到一些麻烦,而不仅仅是在第三方插件设计套件(例如RackAFX)提供音频时操纵音频。 如果有人能推荐这样的低水平内容阅读,我也将不胜感激。

通过直接与Focuswrite ASIO驱动程序进行通信,您可以获得非常低的延迟(这与boost ASIO完全不同)。 要使用此工具,您需要从Steinberg注册并下载ASIO SDK。 在API下载中,有一个名为hostsample的Visual C ++示例项目,这是一个很好的起点,并且有很多关于ASIO使用的缓冲过程的很好的文档。

ASIO使用双重缓冲。 您的应用程序可以在驱动程序的限制范围内选择缓冲区大小。 对于每个输入通道和每个输出通道,将创建2个相同大小的缓冲区。 当驱动程序从一组缓冲区播放并向其中记录时,您的程序正在从另一组缓冲区读取和写入。 如果您的程序正在执行简单的环回,那么它将在记录后有权访问输入的1个缓冲时间段,将直接写入输出缓冲区,该缓冲区将在下一个周期播放,因此会有2个缓冲时间段的延迟。 您将需要进行实验,以找到可以容忍的最小缓冲区大小,而不会出现毛刺,这将使您的延迟最小。 当然,信号处理代码也需要进行充分优化以跟上潮流。 并非闻所未闻的是64个样本(1.3 ms @ 48kHz)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM