我正在编写一个需要托管音频单元的 Objective-C++ 框架。如果我尝试使用 Apple 的默认设备(如 DLS Synth 和各种效果器),一切都可以正常工作。但是,我的应用程序似乎无法找到任何第三方音频单元(在 /Library/Audio/Plug-Ins/Components 中)。
例如,下面的代码片段...
CAComponentDescription tInstrumentDesc =
CAComponentDescription('aumu','dls ','appl');
AUGraphAddNode(mGraph, &tInstrumentDesc, &mInstrumentNode);
AUGraphOpen(mGraph);
...工作得很好。但是,如果我改为tInstrumentDesc
使用'aumu', 'NiMa', '-Ni-'
(Native Instruments 的 Massive Synth 的描述)进行初始化,那么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 中。