Я пишу инфраструктуру 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-'
(описание Massive Synth для Native Instruments), то 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
перечисляет мои сторонние юниты (они тоже проверяются).
I 'я попытался запустить мое тестовое приложение с sudo
, а пользовательская среда, над которой я работаю, находится в /Library/Frameworks.