如何创建实现多个音频单元的 AUAudioUnit?

Posted

技术标签:

【中文标题】如何创建实现多个音频单元的 AUAudioUnit?【英文标题】:How do I create an AUAudioUnit that implements multiple audio units? 【发布时间】:2017-10-16 00:39:16 【问题描述】:

在 Apple 的用于创建 AUAudio 单元的文档中(此处:https://developer.apple.com/documentation/audiotoolbox/auaudiounit/1387570-initwithcomponentdescription) 他们声称

一个音频单元子类可以实现多个音频单元——例如,一个也可以用作发生器的效果器,或一组相关效果器。

我在网上找不到这样的例子。理想情况下,如果您的答案/解决方案涉及使用 Swift 和 AVAudioEngine,那就太好了,但我很乐意接受任何能让我朝着正确方向前进的答案。

提前致谢。

【问题讨论】:

在 2017 年 WWDC 关于 Core Audio 的会议上,Apple 表示不要在实时音频上下文(AUAudioUnit 子类的工作内容)中使用 Swift。 你好 Aurelius,你在这个话题上有什么进展吗? 【参考方案1】:

我在我的测试应用程序中发布了一些源代码,该应用程序使用 AVAudioEngine、Swift 和 C 在 GitHub 上实例化了一个 AVAudioUnit 生成器子类对象:

https://github.com/hotpaw2/auv3test5

请注意,Apple recommends NOT using Swift 在实时音频上下文中,因此我的源代码部分是用 C 编写的,位于 Objective C 包装类中。

如果您使用initWithComponentDescription:options:error:,您可以传递一个选项来配置您的新音频单元子类对象以执行任何操作(在选项上使用类似 switch 语句)。

【讨论】:

让我检查一下你的代码,看看它是否是我需要的。感谢您的回复! 是的,这很有帮助,但除非我遗漏了什么,否则它不会将多个音频单元合二为一? 查看最后一段关于添加选项的内容。 是的,很抱歉,但我觉得这个问题的难点仍未得到解答。最后一段是我不确定做事的最佳方式的地方。 @hotpaw2 您是否偶然知道我如何使您的代码播放特定的音符,例如 C 或 F#?我不需要计算每个音符的特定赫兹吗?

以上是关于如何创建实现多个音频单元的 AUAudioUnit?的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 AUAudioUnit 中查找爆裂声和爆裂声的原因

AUAudioUnit无法播放背景错误代码561145187中的音频

AUAudioUnit和AudioUnit有啥区别

在主机应用程序 (iOS) 中检测 AUv3 失效

AUAudioUnit & AudioUnitGetProperty、AudioUnitSetProperty

音频单元乐器+采样器