Jackd: Измеряем задержку аудио сигнала в цепочке обработки

06 Sep 2020

Не секрет, что большинство диванных музыкантов любят мериться минимальной задержкой своей звуковой карты считая, что это задержка сигнала от поступления на вход карты, прохождения через обработку и появления в мониторах.

Но что на самом деле означает эта задержка? Это лишь время, которое будет затрачено на обработку сигнала после поступления его в роутер (в моем случае в роли роутера выступает jackd).

А как измерить полную задержку вместе со временем на обработку и перевод сигнала в аналог?

jack_iodelay - утилита генерирует тестовый сигнал, который можно направить в роутере куда угодно, потом вернуть на вход этой же утилиты и посмотреть в консоли что получится.

Для измерения нам потребуется небольшой патч чтобы соединить один из входов интерфейса с выходом.

После этого запускаем утилиту, коммутируем нужный вход и выход в роутере и смотрим на результат в консоли.

Показатели задержки сигнала

Общая задержка составляет в среднем 820 фреймов. Чтобы узнать задержку в миллисекундах делим это число на частоту семплирования. (96кГц). Это 8,5мс.

Поле extra loopback latency содержит лаг, который был вызван ЦАП’ом и АЦП.

Задержка зависит и от настроек джека. От количества семплов и периодов на буфер

Для текущего теста 2 периода на буфер и 128 сэмплов. Итого 384. И ~430 фреймов - это задержка на железе. В сумме и получается ~820.

Можно пользоваться опциям -I и -O. Они отдельно позволяют посмотреть задержку по входу и выходу сигнала.