Закъснение на аудио хардуера на iPhone

В момента разработвам приложение, което възпроизвежда аудио файл (mp3, но може да се промени на WAV, за да се намали времето за декодиране) и записва аудио едновременно.
За целите на синхронизирането искам да изчисля точното време, когато звукът започна да играе.

Използвайки AudioQueue за управление на всеки буфер, мога да изчисля времето, когато първият буфер е бил източен. Въпросите ми са:

  1. Какво е хардуерното забавяне между източването на буферите на AudioQueue и действителното им възпроизвеждане?
  2. Има ли API от по-ниско ниво (по-специално AudioUnit), който има по-добра производителност (в мерките за латентност на хардуера)?
  3. Възможно ли е да се постави горна граница на латентността на хардуера с помощта на AudioQueue, без или без декодиране на буфера? 5ms изглежда нещо, с което мога да работя, повече от това ще изисква различен подход.

Благодаря!


person 4bazel    schedule 21.08.2012    source източник


Отговори (1)


Приложният програмен интерфейс (API) за аудио опашка работи над аудио модулите, така че RemoteIO Audio Unit, използващ необработен некомпресиран звук, ще позволи по-ниска и по-детерминирана латентност. Минималната продължителност на буфера RemoteIO, която може да бъде зададена на някои устройства с iOS (с помощта на API за аудио сесия), е около 6 до 24 милисекунди, в зависимост от състоянието на приложението. Това може да зададе по-ниска граница както на латентността на възпроизвеждане, така и на запис, в зависимост от това какви събития използвате за вашите точки за измерване на латентност.

Декодирането на компресирано аудио може да добави около порядък или два повече латентност от началото на декодирането.

person hotpaw2    schedule 21.08.2012