我的自定义音频单元在 AU Lab 中打开,但在 Garageband 或 Ableton 中没有打开

Posted

技术标签:

【中文标题】我的自定义音频单元在 AU Lab 中打开,但在 Garageband 或 Ableton 中没有打开【英文标题】:My custom Audio Unit opens in AU Lab but not Garageband or Ableton 【发布时间】:2012-11-30 17:33:35 【问题描述】:

我在 Xcode 中为我正在学习的信号类创建了一个过滤器 AU,我可以在 AU Lab 中从我的组件文件夹中打开它,但我似乎无法在 DAW 中打开它。任何人都可以帮助我了解这一点吗?它可能是 .plist 文件中的设置吗?代码中没有错误,因为 AU 在 AU 实验室中完美运行。如果有人有想法,我们将不胜感激,我可以提供您可能需要的任何信息。

【问题讨论】:

我也有同样的问题。我的猜测是 GarageBand、Mainstage 和其他人以旧方式加载音频单元插件(à la MacOS 9),使用我一无所知的晦涩已弃用的资源内容(以 .r 结尾的文件,请参阅developer.apple.com/library/mac/#documentation/Darwin/Reference/…)。 AU Lab 和 auval 使用 plist 的 AudioComponents 键加载 AU 组件。如果您获取官方示例代码,很可能您的所有“资源”配置都被搞砸了,因为 .r 文件甚至没有被示例项目“编译”。我会做实验。 如果不是,请尝试在 32 位模式下构建。不久前我遇到了类似的问题:***.com/questions/5639815/… 【参考方案1】:

我进行了我在 cmets 中提到的调查,因此我现在正在写一个真实的答案。

我证实了我的怀疑。如果您没有遇到 32/64 位构建模式的问题(就像其他人所说的那样),您很可能遇到与我相同的问题。

GarageBand 和 Mainstage(可能是其他)不读取捆绑包 plist 的 AudioComponents 键的键。他们只阅读已弃用的蹩脚 Carbon 资源。

我有一个证明(至少在我的系统上:Lion,GarageBand 6.0.5):

我下载的大部分 AU 只提供 Carbon 资源,并且在他们的 plist 中没有 AudioComponents 键(因为这是在 Lion 之前要走的路,只有像我这样的菜鸟会忽略这个事实) 只要我将 Carbon 资源正确添加到我的单元中,它就会开始出现在 GarageBand 和 MainStage 中(youhou!)

如果您从 TremoloUnit 或 Apple 提供的其他一些项目的副本开始您的项目,您必须修复它们,因为他们的项目被搞砸了。显然,维护它们的可怜的灵魂和我一样对 AudioUnit 编程一无所知,他相信(就像我所做的那样)那些来自黑暗时代的可怕 Carbon 事物 现在必须完全弃用,并且他不受约束他们从构建阶段开始。由于生成的 AU 在 AU Lab 中加载正常,并使用 auval 验证罚款,他很高兴并致力于他的工作。

要修复项目,您必须将资源源文件(以.r 结尾的那个)添加到构建阶段(它已经在项目中)。如果您从文件检查器中单击它,XCode 会(从文件扩展名)确定您要构建可怕的碳资源。 在那之后,您肯定会遇到难以理解的构建失败,因为 Rez 搜索路径 是错误的。您还必须仔细检查 .r 文件描述的内容是否与您的 AudioComponents 相同,因为 Apple 的示例项目 AUPinkNoise 在该主题上被破坏(子类型的 4 个字母代码在 plist 和 .r 资源之间不匹配来源)

祝贺 Apple 构建了一个验证工具,它忽略了大多数 Apple 产品当前如何加载 AudioUnit。

【讨论】:

从哪里可以获得 TremoloUnit 示例的 .r 文件?我的项目副本没有。 这里提供的 .r 文件似乎可以工作:allthingsarcane.blogspot.com/2012/04/…【参考方案2】:

This All Things Arcane article 是一个很好的起点。

此外,对于 Apple 提供的 xcode 5.x 和当前 (2015-05) 示例,还有一些额外的步骤可能也会有所帮助: 1. 在“Build Settings, Apple LLVM - Preprocessing”中添加预处理器宏“CA_USE_AUDIO_PLUGIN_ONLY=0”,它可以在您的 .r 文件和 .exp 文件中使用旧样式的入口点(允许您添加 _SinSynthEntry 以及_SinSynthFactory) 2. 删除并重新添加“AUDispatch.cpp”和“AUDispatch.h”到您的项目(这是为了解决缺少的“CMgr_AudioUnitBase...”链接引用) 3. 如果您正在为 OS X 10.8 或更早版本构建,则必须修改 Apple 的 AUBase.cpp 以划分出在 10.9 中添加的 kAudioUnitProperty_NickName,基于 OS X 版本有条件地编译。一个例子:

#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8) //加我! 案例 kAudioUnitProperty_NickName: ca_require(inScope == kAudioUnitScope_Global, InvalidScope); outDataSize = sizeof(CFStringRef); 可写=真; 休息; #endif //加我!

【讨论】:

【参考方案3】:

正如@admsyn 所建议的那样,问题很可能是您正在构建一个 64 位插件,Xcode 默认会为您完成。您应该构建 32/64 位通用二进制文件(在调试 发布版本中),或者只构建 32 位。

另外,运行auval -v 来验证 AU 可能会有所帮助,只是为了确保没有问题。

【讨论】:

正如我所说,我有同样的问题,我的设备确实通过 auval 完全验证(在 32 位和 64 位模式下)。它们可以在 AU Lab 中打开(在 32 位和 64 位模式下)。它们永远不能在 Mainstage 中加载(无论是 32 位还是 64 位模式)。我的 Garageband 无法以 32 位模式启动,所以我只能说它不会以 64 位模式加载我的设备。所以这一定是别的东西,至少对我来说,大概对问题的作者来说。我没有时间研究 OS9 资源假设。 huhu: developer.apple.com/library/mac/#technotes/tn2276/_index.html 如果 Mainstage 和 GarageBand 以 OS

以上是关于我的自定义音频单元在 AU Lab 中打开,但在 Garageband 或 Ableton 中没有打开的主要内容,如果未能解决你的问题,请参考以下文章

加载和选择音频文件到音频单元

在我的自定义按钮中打开 Airplay 弹出框

音频单元无法在 Logic 中运行; .exp _Entry 在链接器中未定义

pr音频不能在au中编辑?

UITableView 自定义单元格在 iPad Storyboard 上不起作用,但在 iPhone 上起作用

如何从音频单元获取 NSView 对象