Иногда надо иметь отдельный виртуальный "выход" для звука из некоторых программ. Например, на стриме через 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 должен появиться в списке устройств выхода звука.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Продолжать?
58.82%да, понравилось!10
35.29%ничего не понятно, но очень интересно6
5.88%лучше не надо1
0%ты забыл про предыдущий пост!0
Проголосовали 17 пользователей. Воздержались 5 пользователей.