Привет.
Возникла необходимость коммутировать звук в debian, уже второй день разбираюсь сам при помощи гугла.
Задача - запускать в определенные моменты воспроизведение mplayer, в режиме моно(делается опцией -af pan=1:0.5:0.5), да не просто запускать, а так, чтобы он тут же подключался к нужным портам jack, например к system:playback_1 и system:playback_4(я использую звуковую карту 5.1). Огромный геморрой в том, что при каждом новом воспроизведении файла mplayer пересоздает свой выходной поток, и настроенные ранее соединения теряются. И еще - надо иметь возможность всё перенастраивать через консоль и конфиги, но без gui.
По словам разработчиков, сам по себе jack такой функциональности не предоставляет - http://jackaudio.org/faq/persistent_connections.html . Значит, у меня есть два варианта - держать постоянно запущенным некого демона, который, при появлении новых jack-потоков, коммутирует их в соответствии с нужными правилами, или, второй вариант - использовать плеер, который в качестве параметра команды воспроизведения принимает эти правила и сразу же коммутируется куда надо, как только создает свой поток.
По первому варианту, я попробовал следовать этой статье - http://www.rncbc.org/drupal/node/76 . Там используется постоянно запущенный gui qjackctl, в функционал которого входит patchpay, которому задаются правила коммутации, и он их выполняет тут же, при запуске любого приложения, описанного в его правилах. В первом приближении, это полностью решает мою задачу, но во втором - есть пара нюансов: мне не нравится необходимость держать запущенный gui qjackctl, а также раздражает едва уловимый, но всё же заметный лаг в подключении нужных каналов при старте воспроизведения, то есть сначала звук появляется в дефолтных каналах, куда подключается плеер при старте, а потом, спустя небольшое, но неприятное время - в остальных, заданных в patchbay. Хотелось бы, по возможности, обойтись без этих неприятностей.
По второму варианту - я обнаружил, что у mplayer-a есть опция запуска -ao jack:port=<НОМЕР ПОРТА> , мне удается задать туда один порт, и всё отлично работает, но я не могу понять, как туда задать несколько произвольных портов, как ни пробовал. Максимум, что удается - задавать порт в виде port=[1-2] для стереозвука, но это абсолютно не дает возможности коммутировать моно выход плеера на произвольные выходы аудиокарты.
Я думаю, меня бы выручило создание некого виртуального jack-устройства, которое бы состояло тупо из входа и выхода, соединенных между собой, я бы тогда выход этого устройства подцепил один раз к нужным выходам звуковухи, а mplayer запускал бы с параметром запуска на вход устройства. Но, как ни гуглил, не нашел как это можно сделать. Максимум - нашел парочку весьма монструозных гуи-микшеров, которые создают тьму входов и выходов, но это уж очень костыльно получается, как из пушки по воробьям.
Резюмируя, получаются такие вопросы:
1. Есть ли более легкая и быстрая, чем qjackctl, утилита, выполняющая оперативную коммутацию вновь запущенных jack приложений в соответствии с заданными правилами?
2. Можно ли задать в опции mplayer-a несколько jack-портов для вывода моно звука?
3. Можно ли сделать так, чтобы mplayer не пересоздавал jack поток при воспроизведении каждого нового файла?
4. Возможно ли создать виртуальное устройство, которое фактически будет выполнять роль сплиттера-костыля?
Ну и конечно, может есть варианты, о которых я даже не подумал?