Разница во времени между AudioOutputUnitStart() и обратным вызовом рендеринга для RemoteIO

Это довольно "мелкий" вопрос относительно времени...

Я использую аудиоустройство iOS RemoteIO, чтобы делать вещи. Интересно, как именно система обрабатывает синхронизацию: после вызова AudioOutputUnitStart() модуль должен включиться, а затем обратные вызовы рендеринга будут вытеснены последующими модулями. Позвольте мне угадать:

Возможность 1: следующий обратный вызов рендеринга происходит сразу после выполнения AudioOutputUnitStart(), затем он продолжается

Возможность 2: система имеет собственный ритм обратного вызова рендеринга. После вызова AudioOutputUnitStart() следующий обратный вызов рендеринга отлавливает один из "следующих" тиков системы, а затем начинает оттуда

1 или 2? или там 3? Заранее спасибо!

1 ответ

Решение

Задержка звука, по-видимому, зависит от конкретной модели устройства, аудиосеанса и параметров, запрошенной частоты дискретизации и размера буфера, а также от того, воспроизводится ли или недавно в системе воспроизводится или записывается какое-либо другое аудио (фоновое или недавно закрытое приложение). Необходимость включения внутренних цепей аудиоусилителя (и т. Д.) Или их включение могут иметь наибольшее значение. Запрос определенных частот дискретизации, по-видимому, также приводит к дополнительному времени из-за буферизации, потенциально необходимой для повторной выборки ОС и кода микшера.

Так что скорее всего (2) или (3).

Лучший способ минимизировать задержку при использовании RemoteIO - это запрашивать очень короткие буферы (от 1 до 6 мсек) при настройке аудио-сеанса, запускать аудио-сеанс и аудиоустройство заблаговременно (при запуске приложения, загрузке просмотра и т. Д.), затем заполните буферы обратного вызова нулями (или отмените записанные данные обратного вызова), пока вам не понадобится звук.

Другие вопросы по тегам