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

Posted

技术标签:

【中文标题】AUGraph 弃用是不是意味着不再有音频渲染回调?【英文标题】:Does AUGraph deprecation means no more audio render callbacks?AUGraph 弃用是否意味着不再有音频渲染回调? 【发布时间】:2019-06-26 18:04:55 【问题描述】:

我有一个带有详细渲染回调的应用程序,我怀疑它是否可以使用 AVAudioEngine。

无论如何要使用我的 AUGraph 渲染回调(带有多个总线)和 AVAudioEngine 吗?

任何示例代码?

【问题讨论】:

【参考方案1】:

Audio Unit API 没有被弃用,只有可能构建在它之上的 AUGraph。

使用AudioUnitSetProperty 和kAudioUnitProperty_MakeConnection 和AudioUnitConnection 结构建立连接。

使用AudioOutputUnitStart 和AudioOutputUnitStop 启动和停止输出单元。

使用AudioUnitSetProperty 和kAudioUnitProperty_SetRenderCallback 和AURenderCallbackStruct 设置渲染回调

除了一点簿记和更简单的连接语法之外,AUGraph 并没有给您提供太多东西。

【讨论】:

感谢 dave234。我看到了带有 AUGraphNodeInfo 的 MixerUnit ... 比如 AUGraphNodeInfo(processingGraph,mixerNode,NULL,&mixerUnit); 如何在没有AUGraphNodeInfo的情况下设置mixerUnit? 我不明白这个问题。 我的疑问是......还有比 AUGraphNodeInfo 设置mixerUnit ( kAudioUnitSubType_MultiChannelMixer ) 的另一种更新方法吗?我猜 AUGraphNodeInfo 也可能被弃用 是的,您根本不会使用节点,直接使用 AudioUnits。在启动输出单元之前,您必须在每个单元上调用AudioUnitInitialize。【参考方案2】:

一个(非弃用)V3 AUAudioUnit 子类仍然可以返回一个支持音频渲染回调的 AUInternalRenderBlock。然后,AVAudioEngine API 可以连接这些音频单元(例如,连接到混音器节点)。 Audio Unit V3 渲染函数似乎仍然允许在 ios 上进行短时间(少于 500 个样本的缓冲区)进行近实时音频合成和分析。

在 GitHub 上查看我的 V3 AU 示例应用程序(混合 Swift 和 Objective C):https://github.com/hotpaw2/auv3test5

【讨论】:

以上是关于AUGraph 弃用是不是意味着不再有音频渲染回调?的主要内容,如果未能解决你的问题,请参考以下文章

AUGraph 在 iOS 上被弃用了吗?如果是这样,啥时候?

AUGraph 播放 aac->pcm 转换的音频流在 iPhone7plus 上听起来断断续续,但不是 iPhone6

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

什么会影响音频单元渲染回调周期(周期)?

直接调用音频单元而不是回调 iOS

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