gpt4 book ai didi

c++ - C++中的实时音频处理

转载 作者:行者123 更新时间:2023-11-27 22:56:30 28 4
gpt4 key购买 nike

我想制作从外部音频接口(interface) (Focusrite Scarlett 2i2) 读取原始音频并在将其返回到接口(interface)进行播放之前用 C++ 对其进行处理的软件。我目前运行的是 Windows 8,想知道如何以最小的延迟执行此操作?

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

很抱歉,这是一个悬而未决的问题,但我在寻找有关音频编程的教育 Material 时遇到了一些麻烦,而不仅仅是在第三方插件设计套件(如 RackAFX)提供时处理音频。如果有人可以推荐一些像这样的低级内容的阅读 Material ,我也将不胜感激。

最佳答案

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

ASIO 使用双缓冲。您的应用程序能够在驱动程序的限制范围内选择缓冲区大小。对于每个输入 channel 和每个输出 channel ,创建 2 个该大小的缓冲区。当驱动程序在一组缓冲区中播放和录制时,您的程序正在读取和写入另一组缓冲区。如果您的程序正在执行一个简单的环回,那么它将在记录后访问输入 1 个缓冲期,将直接写入将在下一个周期播放的输出缓冲区,因此会有 2 个缓冲期的延迟。您需要尝试找到您可以容忍的最小缓冲区大小而不会出现故障,这将为您提供最低的延迟。当然,信号处理代码需要优化得足够好才能跟上。 64 个样本(1.3 毫秒 @ 48kHz)并非闻所未闻。

关于c++ - C++中的实时音频处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32541283/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com