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

问题描述

| 我正在编写需要托管音频单元的Objective-C ++框架。如果我尝试使用Apple的认单位(如DLS Synth)和各种效果,则一切工作都很好。但是,我的应用程序似乎无法找到任何第三方音频单元(在/ Library / Audio / Plug-Ins / Components中)。 例如,以下代码段...
CAComponentDescription tInstrumentDesc = 
     CAComponentDescription(\'aumu\',\'dls \',\'appl\');

AUGraphAddNode(mGraph,&tInstrumentDesc,&mInstrumentNode);

AUGraphOpen(mGraph);
...工作正常。但是,如果我改用
\'aumu\',\'NiMa\',\'-Ni-\'
初始化
tInstrumentDesc
(本机的Massive Synth的说明),则then3ѭ将返回
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);

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

    c = FindNextComponent(c,&d);
}
运行此代码后,唯一的输出
Apple: DLSMusicDevice
(这是符合上面描述
\'aumu\',\'appl\'
的音频单元)。 这似乎不是单位本身的问题,因为Apple的
auval
工具列出了我的第三方单位(他们也进行了验证)。 我尝试使用
sudo
运行测试应用程序,而我正在使用的自定义框架位于/ Library / Frameworks中。     

解决方法

原来,问题是由于编译为64位引起的。切换到32位后,一切开始按广告中的说明工作。我想解决方案不多,但您有。 为了澄清,我的意思是将XCode Build SettingSetting11ѭ更改为\“ 32位Intel \”,而不是默认的\“标准32/64位Intel \”。     ,首先,我假设您通过调用
NewAUGraph(&mGraph)
初始化了
mGraph
,而不是仅仅声明它然后尝试打开它。除此之外,我怀疑这里的问题在于您的AU图,而不是AudioUnits本身。但是可以肯定的是,您可能应该尝试手动加载AudioUnit(即,在图形外部),并查看是否以这种方式出现任何错误。