Смена звуковой карты в JACK на лету

2011.09.23

Звуковая система JACK позволяет как угодно маршруизировать звук, без чего ведение прямых эфиров невозможно.  Я использую JACK постоянно, поэтому часто сталкивался с проблемой: при использовании внешней звуковой карты, если её отключить, JACK зависает, от этого падает PulseAudio и виснут использующие её программы (mplayer, Skype).

Чтобы этого не происходило нужно перед отключением карты выключить поддержку JACK в PulseAudio, перезапустить JACK, затем загрузить модули обратно.  Встроенных средств для этого нет и делать это руками проблематично, поэтому я написал пару скриптов, которые всё автоматизируют:

  • pactl-unload-by-name — выгружает модули PulseAudio по имени (штатными средствами можно только по идентификатору, который достать сложно).
  • jack_set_card — обновляет конфигурацию JACK и перезапускает его, заботясь в процессе о PulseAudio.

Теперь перед отключением USB карты достаточно выполнить команду:

$ jack_set_card Intel

После подключения обратно:

$ jack_set_card USB

TODO

  • Привязать всё это к событиям udev, чтобы всё происходило само.
  • Отучить PulseAudio падать при пропадании jackd, тогда вся эта возня будет ненужна.

Следить за развитием событий можно через RSS ленту или почтовую рассылку.