2016-12-21 19 views
2

Я хочу использовать snd_pcm_delay() для запроса задержки до тех пор, пока образец, который я пишу в буфер ALSA, не слышен. Я ожидаю, что это значение будет варьироваться между отдельными вызовами. Хотя, в двух системах это значение является постоянным. Функция возвращает значение, которое всегда равно размеру периода на одной платформе, а на другой платформе оно равно размеру буфера (в два раза больше размера периода в моем коде).Что именно возвращает snd_pcm_delay() ALSA?

Является ли мое понимание snd_pcm_delay() неправильным? Это проблема с драйвером?

ответ

1

Задержка пропорциональна количеству выборок в буфере (инверсия snd_pcm_avail()), а также время, которое описывает, сколько времени требуется для перемещения выборок из буфера в колонки. Последняя часть зависит от водителя и может не быть реализована.

Если устройство вынимает образцы за один раз за один раз (некоторые контроллеры DMA не имеют лучшей детализации для сообщения о текущей позиции), тогда значение задержки будет оставаться постоянным на некоторое время, а затем скачком период. И вы видите этот прыжок только перед повторным заполнением буфера.