основное аудио руководство / учебник для начинающих - PullRequest
3 голосов
/ 13 ноября 2010

Я немного читаю основные аудио для ios 4 с целью создания небольшого тестового приложения.

Я довольно запутался в этом вопросе со всеми API.В идеале я хочу знать, как это сделать - извлечь несколько семплов из двух mp3-файлов в массивы.

Затем в цикле обратного вызова я хочу смешать эти семплы вместе и отправить их в динамик.

На сайте разработчиков Apple есть примеры, но мне трудно их разобрать и переварить.Кто-нибудь знает где-нибудь хороший урезанный пример?

Также я не могу определить, какие API использовать.

Там есть расширенный аудиофайл и аудиофайл.Похоже, они предназначены для извлечения аудио.Какой из них мне следует использовать?

Если использовать микшерный блок абсолютно необходимо, или мне не терпится создать собственный микширующий код (я хочу как можно больше контроля сэмплов).

Нужно ли мне пользоваться услугами аудио-очереди?Я слышал, что они обеспечивают низкую задержку, это правда?

Наконец, мне нужно использовать сервис аудио сеанса.Будет ли аудио приложение работать без него?Как аудио-сеанс вписывается в весь аудио-извлечение и обратный вызов?Это просто для обработки прерываний?

Ответы [ 2 ]

5 голосов
/ 14 ноября 2010

За последние годы документация по Core Audio значительно улучшилась, но она все еще неполная, иногда запутанная, а иногда просто неправильная.И я нахожу структуру самого фреймворка довольно запутанной (AudioToolbox, AudioUnit, CoreAudio, ... что к чему?).

Но мои предложения по решению вашей задачи таковы (Предупреждение: я не сделалследующее в iOS, только MacOS, но я думаю, что это примерно то же самое):

  1. Используйте ExtendedAudioFile (объявленный в платформе AudioToolbox) для чтения mp3.Он делает то, что предполагает его название, он расширяет возможности AudioFile.Т.е. вы можете назначить формат аудиопотока (AudioStreamBasicDescription) для eaf, и при чтении из него он преобразуется в этот формат для вас (для дальнейшей обработки с аудиоустройствами вы используете идентификатор формата 'kAudioFormatLinearPCM' и флаги формата 'kAudioFormatFlagsAudioUnitCanonical').

  2. Затем вы используете ExtAudioFile ExtAudioFileRead для чтения преобразованного аудио в структуру AudioBufferList, которая представляет собой набор структур AudioBuffer (оба объявлены в платформе CoreAudio), по одному для каждогоканал (так обычно два).Посмотрите «Справочник по типам данных ядра» в разделе «Аудио» на документах, например, AudioStreamBasicDescription, AudioBufferList и AudioBuffer.

  3. Теперь используйте аудиоустройства для воспроизведения и микширования файлов,это не так сложно.Аудиоустройства кажутся этой «большой вещью», но на самом деле это не так.Посмотрите в AudioUnitProperties.h и AUComponent.h (в рамках AudioUnit) для описания доступных аудиоустройств.Ознакомьтесь с «Руководством по хостингу аудиоустройств для iOS» в документации.Единственная проблема здесь в том, что для iOS нет проигрывателя аудиофайлов ... Если я правильно помню, вам нужно вручную подавать сэмплы сэмплами.

  4. Аудиоустройства живут вAUGraph (объявлен в платформе AudioToolbox) и соединены как аудиооборудование через патч-бэй.График также обрабатывает аудио выход для вас.Вы можете проверить пример кода 'PlaySoftMIDI' и 'MixerHost' относительно этого (на самом деле, я только что снова заглянул в MixerHost и думаю, это именно то, что вы хотите сделать!).

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

Также будет книга о Core Audio («Core Audio» Кевина Авила и Криса Адамсона).), но он еще не выпущен.

Надеюсь, все это немного помогает!Удачи, Себастьян

0 голосов
/ 30 сентября 2012

Есть расширенный аудиофайл и аудиофайл.Похоже, они предназначены для извлечения аудио.Какой из них мне следует использовать?

Ни один из них не будет работать, если вы обращаетесь к аудиофайлам, хранящимся в библиотеке iPod.Вам придется использовать AVAssetReader .(Примечание: в документации AVAssetReader ... говорится, что AVAssetReader is not intended for use with real-time sources, and its performance is not guaranteed for real-time operations. Все, что я могу сказать, что он работал нормально для меня ..., и я создал несколько приложений реального времени, используя только AVAssetReader. здесь - этопример.

Пожалуйста, смотрите мой ответ здесь для более общих советов по программированию аудио на iOS.

Наконец, книга Изучение основного звука к настоящему времени уже выпущен. Я настоятельно рекомендую вам терпеливо пройти через главы и поиграть с примером кода. Лучше не торопитесь с примерами и погрузитесь в концепции, прежде чем переходить к более сложному сценарию ... копирование и вставка образцакод из Интернета и / или следование советам высокого уровня людей в сети может сработать вначале, но позже у вас возникнут очень серьезные проблемы, которые никто не поможет вам исправить ... поверьте мне, я выучил трудный путь!

...