MacOS 音频:使用子图的 AUGraph API 的多个输出?

Posted

技术标签:

【中文标题】MacOS 音频:使用子图的 AUGraph API 的多个输出?【英文标题】:MacOS Audio: Multiple outputs with AUGraph API using Subgraphs? 【发布时间】:2021-09-02 09:28:56 【问题描述】:

我正在使用 AUGraph(我知道,它是一个已弃用的 API)来混合多个音频源并应用效果。这适用于单个输出,但我无法将辅助输出添加到我的图表中。

我在互联网上读到,这是一个已知的限制,可以通过使用子图来解决,每个子图都有其专用的输出。

谁能证实这确实是真的?如果是这样,指向示例代码的指针将非常受欢迎。

【问题讨论】:

你调查过聚合设备吗? 嘿 Ilja,将多个源混合到一个输出中正是我在一个副项目中尝试做的。我偶然发现了大量(已弃用)的框架,这阻止了我的热情。你能说出是什么让你选择了 AUGraph 吗?也许这对我来说也是正确的选择???? 据我了解,必须在 Apple 实用程序之一中设置聚合设备。这对最终用户来说太麻烦了。此外,动态切换输出设备也非常困难。 @ChristianBeer 我还想为输入添加不同的音频过滤器。看起来 AUGraph 似乎是最简单的 API,即使它已被弃用。 聚合设备也可以通过编程方式创建 - 但我相信 Apple 提供的唯一实质性文档将在 AudioHardware.h 这样的标题中。这里有几个答案涉及到它,例如***.com/questions/35469569/…。我也这样做了,但记得遇到了一些问题(也许某些属性是异步设置的?) 【参考方案1】:

音频单元和 AUGraph 基于“拉”模型。每个输出都以所需的速率通过图表拉取输入。

对于两个不相关的输出(例如,使用 2 个单独的振荡器芯片或晶体的 2 个 USB 音频设备),这可能意味着 2 个稍微不同的采样率,即使两者都配置为 44.1k(等)。并且单个图只能以一种速率运行。

您可以尝试在其中一个音频单元输出上安装分接头,将其输出样本复制到循环缓冲区中,然后从该 fifo 缓冲区中提取第二个音频输出单元。可能需要针对采样率不匹配(最终导致下溢或溢出问题)采取适当的错误隐藏策略。

【讨论】:

感谢您的见解。我的直觉是,两个配置相同的 AudioGraph,都有自己的输出,会更容易实现。

以上是关于MacOS 音频:使用子图的 AUGraph API 的多个输出?的主要内容,如果未能解决你的问题,请参考以下文章

AUGraph 弃用是不是意味着不再有音频渲染回调?

如何在 iOS 的 AUGraph 中添加两个 I/O 音频单元?

核心音频:不推荐使用 AUGraph 时如何通过 MusicPlayer 播放 MIDI MusicSequence?

AUGraph 回调延迟

AUGraph 3D Mixer 噼啪声

CoreAudio AUGraph 没有声音