音频单元主机需要做些什么才能使用非Apple音频单元?

时间:2011-04-12 18:21:03

标签: macos audiounit

我正在编写一个需要托管音频单元的Objective-C ++框架。如果我尝试使用Apple的默认单位,如DLS Synth和各种效果,一切都很好。但是,我的应用程序似乎无法找到任何第三方音频单元(在/ Library / Audio / Plug-Ins / Components中)。

例如,以下代码段...

CAComponentDescription tInstrumentDesc = 
     CAComponentDescription('aumu','dls ','appl');

AUGraphAddNode(mGraph, &tInstrumentDesc, &mInstrumentNode);

AUGraphOpen(mGraph);

......工作正常。但是,如果我用tInstrumentDesc(Native Instruments的Massive Synth的描述)初始化'aumu', 'NiMa', '-Ni-',那么AUGraphOpen()将返回OSStatus错误badComponentType和AUGraph将无法打开。这适用于我的所有第三方音频单元。

以下代码,从Audacity来源修改而来,对这个问题有所了解。它循环遍历某种类型的所有可用音频单元并打印出它们的名称。

ComponentDescription d;

d.componentType = 'aumu';
d.componentSubType = 0;
d.componentManufacturer = 0;
d.componentFlags = 0;
d.componentFlagsMask = 0;

Component c = FindNextComponent(NULL, &d);
while(c != NULL)
{
    ComponentDescription found;

    Handle nameHandle = NewHandle(0);

    GetComponentInfo(c, &found, nameHandle, 0, 0);

    printf((*nameHandle)+1);
    printf("\n");

    c = FindNextComponent(c, &d);
}

运行此代码后,唯一的输出是Apple: DLSMusicDevice(适合上述说明'aumu', 'dls ', 'appl'的音频单元)。

这对单位本身来说似乎不是问题,因为Apple的auval工具列出了我的第三方单位(他们也验证了)。

我尝试使用sudo运行我的测试应用程序,而我正在处理的自定义框架位于/ Library / Frameworks中。

2 个答案:

答案 0 :(得分:3)

事实证明,问题是由于编译64位。切换到32位后,一切都开始像宣传的那样工作。我猜不是一个解决方案,但你有它。

澄清一下,我的意思是将XCode构建设置ARCHS更改为“32位Intel”,而不是默认的“标准32/64位Intel”。

答案 1 :(得分:0)

首先,我假设您通过调用mGraph来初始化NewAUGraph(&mGraph),而不是仅仅声明它然后尝试打开它。除此之外,我怀疑这里的问题是你的AU图,而不是AudioUnits本身。但是可以肯定的是,您应该尝试手动加载AudioUnit(即在图表之外)并查看是否有任何错误。