Pull to refresh

Заметка: Контроль звуковых выходов для программ

Reading time2 min
Views2.6K

Иногда надо иметь отдельный виртуальный "выход" для звука из некоторых программ. Например, на стриме через OBS. Эта программа не поддерживает такое "нативно", но это возможно сделать с помощью PulseAudio.


Делается это с помощью null sinks и модуля loopback, про которые я немножко расскажу.


Понадоблятся утилиты pactl и pavucontrol, которые должны быть установлены.


Первый шаг. Создание Sink


В PulseAudio есть такая вещь, как sinks, которые представляют собой выходы для звука. Нам нужен такой, чтобы не был привязан к наушникам или ещё чему-то. Создаётся такой командой:


pactl load-module module-null-sink sink_name="web_sink" sink_properties=device.description="a sink for the web browser"

Мы вызываем утилиту pactl, чтобы создать так называемый null sink, который представлен отдельным модулем в PulseAudio. Ему мы передаём параметры:


  • название sink: я выбрал web_sink, так как использовать буду для Firefox;
  • настройки:
    • описание: тут всё понятно с названия, a sink for the web browser


Это то что нам надо — sink (выход), не привязанный к устройству.


Шаг второй. Перенаправление


Теперь нам нужен pavucontrol, чтобы назначить приложению данный sink.


Предупреждение: это НОРМАЛЬНО, что вы не будете слышать звук из того приложение, которое выбрали!


Открываем pavucontrol и видим список приложений с настройками громкости и sink-ами:
скриншот


Теперь, проскроллим к тому приложению, которому надо переназначить выход. Нажимаем на кнопку, где сейчас написано название устройства выхода, и выбираем нужный sink в выпадающем меню.


Как я уже сказал, его не будет слышно — это знак того, что вы сделали всё правильно.


Третий (последний) шаг. Возвращение звука


Для "подключения" null sink к наушникам, используется модуль loopback, который только этим и занимается.


Сначала, надо узнать, как сам PulseAudio называет это устройство. Для этого выполняем команду:


pactl list short sinks

Надо найти строку, где в конце пишет RUNNING, и получить оттуда название (у меня оно выглядит как-то так: alsa_output.INTERFACE-NAME.analog-[stereo/mono]).


Потом загружаем нужный модуль, и не забываем проставить правильные названия sink-ов:


pactl load-module module-loopback source="web_sink".monitor sink="OUTPUTDEVICENAME"

Теперь должно быть всё слышно. А если зайти в тот же OBS, sink web должен появиться в списке устройств выхода звука.

Only registered users can participate in poll. Log in, please.
Продолжать?
56.25% да, понравилось!9
37.5% ничего не понятно, но очень интересно6
6.25% лучше не надо1
0% ты забыл про предыдущий пост!0
16 users voted. 5 users abstained.
Tags:
Hubs:
+5
Comments4

Articles

Change theme settings