Смена звуковой карты в JACK на лету
Звуковая система 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 ленту или почтовую рассылку.