IOS: аудиоустройства против OpenAL vs Core Audio

Может ли кто-нибудь объяснить мне, как OpenAL вписывается в схему звука на iPhone?

Кажется, существуют API на разных уровнях для обработки звука. Более высокие уровни достаточно легки для понимания.

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

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

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

Ответ 1

Вот что я понял:

Субстрат - это Core Audio. В частности, аудиоустройства.

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

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

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

Вид антиинтуитивного - просто глядя на источник, похоже, что OpenAL - более низкий уровень. Не так!

Ответ 2

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

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