AudioQueueNewInput обратная связь обратного вызова - PullRequest
3 голосов
/ 04 января 2011

Независимо от размера буферов, которые я предоставляю, обратный вызов, предоставленный AudioQueueNewInput, происходит примерно в один и тот же интервал времени.

Например:

Если у вас есть 0,05 секундные буферы и вы записываете со скоростью 44k, обратный вызов сначала вызывается примерно за 0,09 секунды, а затем сразу же происходит второй вызов (0,001 секунды). Затем вы снова ждете ~ 0,09 секунды. Если ваш размер буфера был 0,025. Вы бы подождали 0,09 секунды и почти мгновенно увидели бы еще 3 буфера.

Изменение частоты дискретизации увеличивает задержку.

Запись 16-битного звука 8k приводит к задержке в 0,5 секунды между переполнением буфера.

Так что я подозреваю, что за кулисами используется буфер на 8000 байт. Когда он заполнен, мой обратный вызов запускается с заданными буферами, пока не будет очищен.

Я хочу записать 16k 16-битное аудио с минимально возможной задержкой. Учитывая вышеизложенное, я всегда вижу около четверти секунды задержки. Есть ли способ уменьшить время ожидания? Есть ли свойство аудио сеанса для установки размера внутреннего буфера? Я пробовал kAudioSessionProperty_PreferredHardwareIOBufferDuration, но, похоже, это не помогает.

спасибо!

1 Ответ

0 голосов
/ 04 января 2011

API Audio Queue выглядит так, как будто он построен поверх API AudioIO RemoteIO.Буферы Small Audio Queue, вероятно, используются для заполнения большего буфера RemoteIO за кулисами.Возможно, даже имеет место некоторая повторная выборка скорости (на исходном телефоне 2G).

Для более низкой задержки попробуйте напрямую использовать интерфейс API Audio Unit Remote, а затем запросить аудиосеанс, чтобы обеспечить вашему приложению меньшую меньшую задержкуразмер буфера.

...