C+中的实时音频处理+; 我想制作一个软件,它从外部音频接口(Focusrite Scarlett 2I2)读取原始音频,然后在C++中处理它,然后将其返回到回放接口。我目前正在运行Windows8,想知道如何以最小的延迟完成这项工作

C+中的实时音频处理+; 我想制作一个软件,它从外部音频接口(Focusrite Scarlett 2I2)读取原始音频,然后在C++中处理它,然后将其返回到回放接口。我目前正在运行Windows8,想知道如何以最小的延迟完成这项工作,c++,audio,latency,C++,Audio,Latency,我花了一段时间研究(boost)ASIO,但文档似乎相当差。我也在考虑OpenCL,但有人告诉我它很可能会有更高的延迟。理想情况下,我希望能够直接访问Focusrite驱动程序 很抱歉,这是一个悬而未决的问题,但我在查找音频编程方面的教育资料时遇到了一些困难,除了在由第三方插件设计套件(如RackAFX)提供时仅操纵音频之外。如果有人能推荐一些像这样的低级别内容,我也将不胜感激。通过直接与Focuswrite ASIO驱动程序通信,您可以获得非常低的延迟(这与boost ASIO完全不同)。要使

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


很抱歉,这是一个悬而未决的问题,但我在查找音频编程方面的教育资料时遇到了一些困难,除了在由第三方插件设计套件(如RackAFX)提供时仅操纵音频之外。如果有人能推荐一些像这样的低级别内容,我也将不胜感激。

通过直接与Focuswrite ASIO驱动程序通信,您可以获得非常低的延迟(这与boost ASIO完全不同)。要使用它,您需要注册并从Steinberg下载ASIO SDK。在API下载中有一个VisualC++示例项目,叫做“HestStaskProject”,这是一个很好的起点,并且有关于ASIO ./P>所使用的缓冲过程的很好的文档。
ASIO使用双缓冲。应用程序能够在驱动程序的限制范围内选择缓冲区大小。对于每个输入通道和每个输出通道,将创建2个该大小的缓冲区。当驱动程序在一组缓冲区中播放和录制时,您的程序正在读取和写入另一组缓冲区。如果您的程序正在执行一个简单的环回,那么它将在记录后访问输入1缓冲区,将直接写入输出缓冲区,该缓冲区将在下一个缓冲区播放,因此将有2个缓冲区延迟。您需要进行实验,以找到可以容忍的最小缓冲区大小,而不会出现故障,这将为您提供最低的延迟。当然,信号处理代码需要充分优化,才能跟上进度。64个样本(48kHz时为1.3毫秒)并非闻所未闻。

通过直接与Focuswrite ASIO驱动程序通信,您可以获得非常低的延迟(这与boost ASIO完全不同)。要使用它,您需要注册并从Steinberg下载ASIO SDK。在API下载中有一个VisualC++示例项目,叫做“HestStaskProject”,这是一个很好的起点,并且有关于ASIO ./P>所使用的缓冲过程的很好的文档。
ASIO使用双缓冲。应用程序能够在驱动程序的限制范围内选择缓冲区大小。对于每个输入通道和每个输出通道,将创建2个该大小的缓冲区。当驱动程序在一组缓冲区中播放和录制时,您的程序正在读取和写入另一组缓冲区。如果您的程序正在执行一个简单的环回,那么它将在记录后访问输入1缓冲区,将直接写入输出缓冲区,该缓冲区将在下一个缓冲区播放,因此将有2个缓冲区延迟。您需要进行实验,以找到可以容忍的最小缓冲区大小,而不会出现故障,这将为您提供最低的延迟。当然,信号处理代码需要充分优化,才能跟上进度。64个样本(48kHz时为1.3毫秒)并非闻所未闻。

我也意识到我不太可能让最终产品达到不明显的低延迟,我只是想看看我能达到多近。你还没有说你在使用哪个平台。在MacOSX上,对于Firewire/Thunderbolt设备,可以将缓冲区延迟降低到1ms以下。这将是一个多一点的USB。5-10ms的往返延迟是可以实现的,尽管这是以牺牲高CPU利用率为代价的。此外,我意识到我不太可能将最终产品的延迟降低到不明显的程度,我只是想看看我能达到多大程度。你还没有说你在使用哪个平台。在MacOSX上,对于Firewire/Thunderbolt设备,可以将缓冲区延迟降低到1ms以下。这将是一个多一点的USB。可实现5-10ms的往返延迟,虽然这是以牺牲高CPU利用率为代价的。但与MAC等效的是核心音频driver@UmNyobe:有点:要在MacOSX上实现低延迟,只需使用CoreAudio和AudioUnits的普通高级API,您也可以在MacOSX上使用ASIO-它简单地位于CoreAudio之上,而不是使用自己的一组驱动程序-它有传统上是在Windows上完成的,以避免系统音频堆栈。您希望这样做的原因是它提供了一个跨平台的抽象。MAC等价物是核心音频driver@UmNyobe:排序:要在MacOSX上实现低延迟,只需使用CoreAudio和AudioUnits的普通高级API,您也可以在MacOSX上使用ASIO-它简单地位于CoreAudio之上,而不是使用自己的一组API驱动程序-它传统上在Windows上这样做是为了避免系统音频堆栈。您希望这样做的原因是它提供了一个跨平台的抽象。