2014-09-03 3 views
2

Я хочу записывать аудио в Linux с низкой задержкой в ​​программе, которую я пишу.Захват звука в Linux с низкой задержкой

Я провел несколько экспериментов с использованием API ALSA, используя snd_pcm_readi() до захвата звука, затем сразу же используя snd_pcm_writei(), чтобы воспроизвести его.

Я попытался сыграть с количеством захваченных кадров и размером буфера , но, похоже, я не могу получить задержку менее чем за секунду. или около того.

Мне лучше использовать PulseAudio или JACK? Могут ли они использоваться для воспроизведения записанного звука ?

+0

Кроме того, будет ли ALSA snd_pcm_mmap ... функции улучшения задержки? –

ответ

0

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

Джек может воспроизводить захваченное аудио (просто подключите входные порты к выходным портам), но вам все равно нужно настроить его периоды/буферы.

См. Также Relation between period size of speaker and mic и Recording from ALSA - understanding memory mapping.

0

Я делаю некоторые работы по низкой латентностью аудио программирования,

Мой опыт, во-первых, ваш буфер захвата должен быть небольшим, как 10ms период буфера. (предположим, что вы используете 512-фреймовый буфер и 48000 выборочной частоты).

Затем вы должны настроить начальное_пороговое устройство устройства вывода как минимум на 2 * размер кадра (размер кадра 1 *, если у вас нет большого количества записанных данных).

Для устройства записи, например CL. сказал, использовать относительный небольшой размер периода лучше, но не слишком мал, чтобы избежать слишком много irq.

Кроме того, вы можете изменить расписание процесса на расписание FIFO.

Затем, надеюсь, вы получите суммарную задержку в 20 мс.

0

Я считаю, что вы должны сначала убедиться, что вы используете ядро ​​Linux, которое фактически позволяет достичь низкой типичной задержки.

Есть несколько вариантов конфигурации ядра времени компиляции, которые вы можете посмотреть в:

  • CONFIG_HZ_1000
  • CONFIG_IRQ_FORCED_THREADING
  • CONFIG_PREEMPT
  • CONFIG_PREEMPT_RT_FULL (доступен только с патчем RT)

Кроме того, существует более которые вы можете сделать, чтобы оптимизировать латентность звука в Linux. Некоторые отправной точки отсчета можно найти здесь:

http://wiki.linuxaudio.org/wiki/real_time_info