Я запускаю тест, чтобы измерить базовую задержку моего iPhone-приложения, и результат был разочаровывающим: 50 мс для тестового приложения для воспроизведения. Приложение просто подбирает микрофонный вход и воспроизводит его, используя тот же обратный вызов рендеринга, никаких других аудиоустройств или обработки. Поэтому результаты оказались слишком плохими для такого базового сценария. Мне нужны некоторые указатели, чтобы увидеть, имеет ли смысл смысл, или у меня были недостатки дизайна в моем тесте.iOS: результат измерения задержки входного сигнала Bad Mic
Основная идея теста была иметь три роли:
- Мой палец оснастки в качестве эталонного источника звука.
- Простой iOS play-thru приложение (с использованием встроенного микрофона) в качестве первого слушателя на # 1.
- Mac (с USB-микрофоном и Audacity) в качестве второго прослушивателя для # 1 и единственным слушателем выхода iOS (через динамик, подключенный через гнездо для наушников iOS).
Затем, с Audacity в режиме записи, Mac будет подбирать звук из моих пальцев и его «клон» из динамика iOS в близком расстоянии. Наконец, я просто визуально наблюдаю за формой сигнала в записанной дорожке Audacity и измеряю временной интервал между пиками двух записанных снимков.
Это было отнюдь не суперточное измерение, но по крайней мере врожденная латентность конвейера записи Mac должна была быть отменена таким образом. Таким образом, ошибка должна в основном исходить из измерения максимального расстояния, которое, как я полагаю, должно быть намного меньше, чем латентность звукового конвейера, и его можно игнорировать.
Я ожидал 20 мс или ниже латентность, но, очевидно, результат дал мне 50 ~ 60 мс. В моем ASBD используется формат kAudioFormatFlagsCanonical и kAudioFormatLinearPCM.
Ну 50 мса соответствует суммарному размеру буфера около 2048 при частоте дискретизации 44,1 кГц, что не кажется необоснованным, учитывая, что у вас есть как запись, так и путь воспроизведения. –
Спасибо, Пол! Я не понимал, что размер буфера по умолчанию равен 2048. Тогда будет смысл, поскольку 2048/44.1k означает задержку в 46 мс! Примечание. Я нашел способ изменить размер буфера. Спасибо огромное! – kakyo
Я не знаю, что размер буфера равен 2048, и может быть более одного буфера в тестовом цикле проверки воспроизведения, но кажется, что эффективный * общий размер буфера * в вашем тесте, вероятно, порядка 2048 , что не кажется необоснованным. Конечно, если вас интересует только латентность записи, как говорит название вашего вопроса, тогда вам нужно будет найти способ дразнить это отдельно от латентности воспроизведения. –