2010-10-25 4 views
33

Может ли кто-нибудь объяснить мне, как OpenAL вписывается в схему звука на iPhone?iOS: Аудиоустройства против OpenAL vs Core Audio

Похоже, что API-интерфейсы на разных уровнях предназначены для обработки звука. Более высокие уровни достаточно легки для понимания.

Но мое понимание становится мрачным в сторону дна. Есть Core Audio, Audio Units, OpenAL.

Какая связь между ними? Является OpenAL субстратом, на котором покоится Core Audio (который содержит в качестве одного из его объектов нижнего уровня Audio Units)?

OpenAL, по-видимому, не документирован Xcode, но я могу запускать код, который использует его функции.

+0

[Замечательный обзор здесь] (https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html) – bobobobo

ответ

36

Это то, что я выяснил:

Субстрат является Core Audio. В частности, аудиоустройства.

Таким образом, аудиокомпоненты образуют базовый слой, а некоторые низкоуровневые рамки были построены поверх этого. И весь caboodle называется Core Audio.

OpenAL - это многоплатформенный API - создатели пытаются отразить переносимость OpenGL. Несколько компаний спонсируют OpenAL, в том числе Creative Labs и Apple!

Итак, Apple предоставила этот API, в основном как тонкую оболочку по Core Audio. Я предполагаю, что это позволяет разработчикам легко извлекать код. Будьте осторожны, это неполная реализация, поэтому, если вы хотите, чтобы OpenAL выполнял то, что может сделать Core Audio, он это сделает. Но иначе это не будет.

Тип контратаки - просто глядя на источник, он выглядит так, как если бы OpenAL был более низким. Не так!

+0

+1, Хорошее резюме. Я хотел бы добавить, что по моему опыту OpenAL немного шелушится на iOS, и этого следует избегать, если это возможно. CoreAudio нелегко, но это потому, что обработка звука в целом непростая, но, по крайней мере, она работает очень надежно. – DarkDust

+0

У меня были хорошие результаты с OpenAL, и Cocos2D также использует его.Я не знал, что это не самый низкий уровень API, хотя и должен сказать, что я немного озадачен! –

+6

Еще одна потенциально полезная вещь, которую нужно знать: «Блок 3D-микшера [аудио] является основой, на которой построен OpenAL» - из документов Apple: http://developer.apple.com/library/ios/#DOCUMENTATION/MusicAudio /Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingFundamentals/AudioUnitHostingFundamentals.html –

34

Core Audio охватывает множество вещей, таких как чтение и запись различных форматов файлов, преобразование кодировок, вытягивание кадров из потоков и т. Д. Большая часть этой функции собирается как «Audio Toolbox». Core Audio также предлагает несколько API-интерфейсов для обработки потоков аудио, для воспроизведения, захвата или для обоих. Самый низкий уровень - это Audio Units, который работает с несжатым (PCM) аудио и имеет некоторые приятные вещи для применения эффектов, микширования и т. Д. Очереди аудио, реализованные поверх аудиоустройств, намного проще, потому что они работают со сжатыми форматами (не только PCM) и избавит вас от некоторых проблем с потоками. OpenAL также реализуется поверх аудиоустройств; вам все равно придется использовать PCM, но, по крайней мере, нить не страшна. Разница в том, что, поскольку это не от Apple, ее соглашения по программированию полностью отличаются от Core Audio и остальной части iOS (наиболее очевидно, что это push-интерфейс: если вы хотите использовать OpenAL, вы опросите свои источники, чтобы узнать, есть ли у них исчерпали свои буферы и нажали на новые, а наоборот, звуковые очереди и аудиоустройства были основаны на pull-based, поскольку вы получаете обратный вызов, когда новые образцы необходимы для воспроизведения).

Более высокий уровень, как вы видели, является хорошим материалом, таким как Media Player и AV Foundation. Это намного проще, если вы просто играете в файл, но, вероятно, не собираетесь предоставлять вам достаточно глубокий доступ, если хотите сделать какие-то эффекты, обработку сигналов и т. Д.

+0

Отличное объяснение. –

+0

Хорошая работа. Должен быть принятый ответ. – yothenberg

Смежные вопросы