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

时间:2012-11-30 17:33:35

标签: xcode plugins core-audio audiounit

我在Xcode中创建了一个过滤器AU作为我正在进行的信号类的项目,我可以在AU实验室中从我的组件文件夹中打开它,但我似乎无法在DAW中打开它。任何人都可以帮我解决这个问题吗?它可能是.plist文件中的设置吗?代码中没有错误,因为AU在AU实验室中运行良好。如果有人有想法,我将非常感谢帮助,并且我可以提供您可能需要的任何信息。

3 个答案:

答案 0 :(得分:4)

我在评论中提到了调查,因此我现在正在写一个真正的答案。

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

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

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

  • 我下载的大部分AU只提供了Carbon资源,而且他们的plist中没有AudioComponents键(因为这是Lion之前的方式,只有像我一样的noob忽略了这个事实)
  • 一旦我将碳资源正确添加到我的单位,它就会开始出现在GarageBand和MainStage中(youhou!)

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

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

祝贺Apple建立一个验证工具,忽略大多数Apple产品目前加载AudioUnit的方式。

答案 1 :(得分:1)

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

此外,对于Apple的xcode 5.x和现在的(2015-05)示例,还有一些额外的步骤也可能有所帮助:

1.在"构建设置,Apple LLVM - 预处理"添加预处理器宏" CA_USE_AUDIO_PLUGIN_ONLY = 0"这使得能够在.r文件和.exp文件中使用旧样式入口点(允许您添加_SinSynthEntry以及_SinSynthFactory)

2.删除并重新添加" AUDispatch.cpp"和#34; AUDispatch.h"到您的项目(这是为了解决丢失的" CMgr_AudioUnitBase ..."链接参考)

3.如果您正在为OS X 10.8或更早版本构建,则必须修改Apple的AUBase.cpp以创建kAudioUnitProperty_NickName,该kAudioUnitProperty_NickName是基于OS X版本在10.9条件编译中添加的。一个例子:

#if (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_8)    //ADD ME!
    case kAudioUnitProperty_NickName:
        ca_require(inScope == kAudioUnitScope_Global, InvalidScope);
        outDataSize = sizeof(CFStringRef);
        outWritable = true;
        break;
#endif                                                         //ADD ME!

答案 2 :(得分:0)

正如@admsyn建议的那样,问题很可能就是你正在构建一个64位的插件,默认情况下Xcode会为你做这件事。您应该构建一个32/64位通用二进制文件(在Debug Release版本中),或者只是32位。

也可能有助于运行auval -v来验证AU,只是为了确保没有错误。