问题描述
|
我正在编写需要托管音频单元的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(即,在图形外部),并查看是否以这种方式出现任何错误。