Что нужно сделать хосту аудиоустройства, чтобы использовать аудиоустройства не Apple? - PullRequest
4 голосов
/ 12 апреля 2011

Я пишу инфраструктуру 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.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Оказывается, проблема была из-за компиляции для 64-битной.После перехода на 32-битную все стало работать как рекламируется.Полагаю, это не слишком удачное решение, но оно у вас есть.

Чтобы пояснить, я имею в виду изменение параметра сборки XCode ARCHS на «32-битный Intel», а не по умолчанию «Стандарт 32/64».-битный Intel ".

0 голосов
/ 13 апреля 2011

Прежде всего, я собираюсь предположить, что вы инициализировали mGraph, вызвав NewAUGraph(&mGraph) вместо того, чтобы просто объявить его и затем попытаться открыть его.Кроме того, я подозреваю, что проблема здесь в вашем графике AU, а не в самих аудиоустройствах.Но, чтобы быть уверенным, вам, вероятно, следует попробовать загрузить AudioUnit вручную (т. Е. Вне графика) и посмотреть, не возникнут ли какие-либо ошибки таким образом.

...