Какой API для воспроизведения аудио из буфера в IOS и OSX? - PullRequest
5 голосов
/ 04 февраля 2012

Я хотел бы сделать это очень просто: воспроизводить аудиоданные PCM из памяти.

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

Так что я ищу лучший способ повторно реализовать мою старую устаревшую AudioWrapper (которая была основана на AudioUnits V1), но я не смог найти в Документация Apple API, который будет выполнять следующее:

  • Совместимо с 10,5 до 10,7.
  • Доступно в ios.
  • Не зависит от сторонней библиотеки.
  • Будьте ориентированы на будущее (например: не на основе углерода, 64 бита ...).

Я думаю об использовании OpenAL, но действительно ли это лучший вариант? Я видел отрицательных мнений по этому поводу, это может быть слишком сложно и излишне, и может повысить производительность?

В худшем случае я мог бы иметь две разные реализации этого AudioWrapper , но, если это возможно, я бы действительно хотел избежать использования одной версии для каждой системы (ios, 10.5, 10.6, 10.7 ... ). Также это будет на C ++.

РЕДАКТИРОВАТЬ: Мне нужно хорошее время ожидания, система должна реагировать на взаимодействия с пользователем менее чем за 20 мс (буферы должны быть между 128 и 512 выборок на 44 кГц)

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

AudioQueues довольно распространены.Однако размеры их буфера ввода / вывода достаточно велики, поэтому они не идеальны для интерактивного ввода / вывода (например, синтезатора).

Для более низкой задержки попробуйте AudioUnits - пример MixerHost может быть хорошей отправной точкой.

1 голос
/ 05 февраля 2012

Не уверен насчет OS X 10.5, но я напрямую использую API Audio Units для анализа и синтеза аудио с малой задержкой в ​​OS X 10.6, 10.7 и iOS 3.x - 5.x.Мой файл-обертка для обобщения API составил всего несколько сотен строк простого C с несколькими ifdefs.

Задержка аудио-очередей была слишком высока для моих вещей с низкой задержкой на iOS, тогда как iOS RemoteIO AudioПохоже, что устройство допускает буферы длиной до 256 сэмплов (но иногда до 1024 при отключении дисплея) с частотой дискретизации 44100.

...