Аудиоустройства iOS: когда необходимо использование AUGraph? - PullRequest
9 голосов
/ 18 июля 2011

Я совершенно новичок в программировании на iOS (я скорее парень из Android ...) и мне нужно создать приложение, работающее с аудио DSP. (Я знаю, что это не самый простой способ подойти к iOS dev;))

Приложение должно иметь возможность принимать входные данные от:

1- встроенный микрофон 2- Библиотека iPod

Затем к входному звуку могут быть применены фильтры, и полученный результат должен быть переведен в:

1- Динамик 2- Запись в файл

Мой вопрос заключается в следующем: необходим ли AUGraph, например, для того, чтобы иметь возможность, например, применять несколько фильтров к входу или эти разные эффекты могут быть применены при обработке семплов с различными обратными вызовами рендеринга?

Если я использую AUGraph, нужно ли мне: 1 аудиоустройство для каждого входа, 1 аудиоустройство для выхода и 1 аудио вход для каждого эффекта / фильтра?

И, наконец, если я не могу, я могу иметь только 1 аудиоустройство и перенастроить его для выбора источника / назначения?

Большое спасибо за ваши ответы! Я заблудился с этим материалом ...

1 Ответ

14 голосов
/ 22 июля 2011

Вы действительно можете использовать обратные вызовы рендеринга, если хотите, но встроенные аудиоустройства великолепны (и есть вещи, которые я пока не могу сказать здесь, в NDA и т. Д., Я бы сказал слишком много, если выиметь доступ к iOS 5 SDK, я рекомендую вам посмотреть).

Вы можете реализовать желаемое поведение, не используя AUGraph, однако рекомендуется делать это, так как во многом заботится ои экономит ваше время и усилия.

Использование AUGraph

Из Руководства по хостингу аудиоустройств (Библиотека разработчиков iOS) :

Тип AUGraph повышает безопасность потоков в истории аудиоустройства: он позволяет перенастроить цепочку обработки на лету.Например, вы можете безопасно вставить эквалайзер или даже заменить другую функцию обратного вызова рендеринга для входа микшера во время воспроизведения звука.Фактически, тип AUGraph обеспечивает единственный API в iOS для выполнения такого рода динамической реконфигурации в аудиоприложении.

Выбор шаблона проектирования (Библиотека разработчика iOS) подробно расскажем о том, как вы будете выбирать, как реализовать среду аудиоустройства.От настройки аудио сеанса, построения графиков и настройки / добавления модулей до написания обратных вызовов.

Что касается того, какие аудиоустройства вы хотите указать на графике, в дополнение к тому, что вы уже указали, вам понадобится многоканальный микшерный блок (см. Использование определенных аудиоустройств(iOS Developer Library) ) для микширования двух аудио входов, а затем подключите микшер к устройству Output .

Прямое подключение

В качестве альтернативы, если выМы должны были сделать это напрямую, без использования AUGraph, следующий код - пример для самостоятельного подключения аудиоустройств.(Из Создание приложений аудиоустройства (Библиотека разработчика iOS) )

Кроме того, вы можете устанавливать и разрывать соединения между аудиоустройствами напрямую, используя механизм свойств аудиоустройства.Для этого используйте функцию AudioUnitSetProperty вместе со свойством kAudioUnitProperty_MakeConnection, как показано в Listing 2-6 .Этот подход требует, чтобы вы определяли структуру AudioUnitConnection для каждого соединения в качестве значения его свойства.

/*Listing 2-6*/
AudioUnitElement mixerUnitOutputBus  = 0;
AudioUnitElement ioUnitOutputElement = 0;

AudioUnitConnection mixerOutToIoUnitIn;
mixerOutToIoUnitIn.sourceAudioUnit    = mixerUnitInstance;
mixerOutToIoUnitIn.sourceOutputNumber = mixerUnitOutputBus;
mixerOutToIoUnitIn.destInputNumber    = ioUnitOutputElement;

AudioUnitSetProperty (
    ioUnitInstance,                     // connection destination
    kAudioUnitProperty_MakeConnection,  // property key
    kAudioUnitScope_Input,              // destination scope
    ioUnitOutputElement,                // destination element
    &mixerOutToIoUnitIn,                // connection definition
    sizeof (mixerOutToIoUnitIn)
);
...