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

2011.09.23; метки: , tech, ,

Звуковая система 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, тогда вся эта возня будет ненужна.

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