Анализ причин задержки обработки звука в Linux и Android

Разработчики звукового движка Superpowered подробно проанализировали причины возникновения десятимиллисекундной задержки при прохождении звуковых данных от оборудования до приложения на платформе Android. Оказалось, что причиной задержки является дискретный характер работы подсистемы ALSA, из-за чего половина (5.3 мс) из наблюдаемой 13 мс задержки возникает в драйвере ALSA, а остальную половину вносит медиасервер Audio Flinger, который вынужден обрабатывать данные порциями. На оцифровку и передачу данных тратится по 1 миллисекунде. Задержка в ALSA и Audio Flinger вызвана тем, что данные компоненты оперируют фиксированными блоками, включающими данные о 480 звуковых выборках (48000 Hz/100). Информация обрабатывается порциями и передаётся только после заполнения блока, на который тратится примерно 10 мс. В то время как драйвером заполняется очередной блок, ранее заполненный блок целиком обрабатывается звуковым стеком. Для обычных пользователей задержка на уровне нескольких десятков микросекунд незаметна, но она может представлять проблему для профессиональных звуковых приложений и VOIP-систем, а также при наложении звуковых эффектов в играх и 3D-шлемах.

0_1429516136.png

Полный текст статьи читайте на OpenNet