Как создать новое виртуальное устройство Pipewire, которое объединит реальные входные и выходные данные в новый вход?

Моя проблема заключается в следующем: я разговариваю с друзьями через голосовой чат и в какой-то момент мне также хотелось бы добавить к этому немного музыки. Итак, моя текущая настройка такова:

      Microphone (Input device) -> Voice software
Music player -> Headphones (Output device)

Я хотел бы иметь это:

      Music player -> Headphones

Music player -\
               -> ? -> Voice software
Microphone   -/

Я немного просмотрел вики Pipewire , и особенно часть овиртуальных устройствах показалась мне очень актуальной, но после того, как я поигрался с большим количествомpw-loopbackВ конце концов я сдался.

В конце концов, я думаю, мне понадобится виртуальное устройство ввода, чтобы его можно было выбирать даже в моих приложениях для записи.

Это вообще правильный подход?

2 ответа

Если вы хотите совместить голосовой ввод (микрофон) и вывод музыкального проигрывателя, то настройка будет такой:

      Music player -\
               -> Combined Sink/Source -> Virtual Microphone -> Voice software
Microphone   -/

Вот прохождение:

1. Создайте интерфейс комбинированного приемника

      pactl load-module module-null-sink media.class=Audio/Sink sink_name=my-combined-sink channel_map=stereo

2. Создайте виртуальный микрофон.

      pactl load-module module-null-sink media.class=Audio/Source/Virtual sink_name=my-virtualmic channel_map=front-left,front-right

3. Подключите микрофон и выход музыкального плеера к объединенной раковине.

Примечание. Имя интерфейса микрофона и имя выходного интерфейса музыкального проигрывателя могут отличаться. Бегатьpw-link -oчтобы показать список выходов.

      pw-link spotify:output_FL my-combined-sink:playback_FL
pw-link spotify:output_FR my-combined-sink:playback_FR

pw-link alsa_input.pci-0000_00_1f.3.analog-stereo:capture_FL  my-combined-sink:playback_FL
pw-link alsa_input.pci-0000_00_1f.3.analog-stereo:capture_FR  my-combined-sink:playback_FR

4. Подключите комбинированную раковину к виртуальному микрофону.

      pw-link my-combined-sink:monitor_FL my-virtualmic:input_FL
pw-link my-combined-sink:monitor_FR my-virtualmic:input_FR

Теперь вы можете указать голосовому программному обеспечению использовать этот виртуальный микрофон или установить виртуальный микрофон в качестве голосового ввода по умолчанию.

Вот заскриптованная версия ответа от Пуджианто. Это создаст объединенный виртуальный микрофон с другим приложением (которое, как предполагается, воспроизводит стерео, имеет уникальное имя и доступно для поиска).

напримерcombine_audio.sh spotify

Сценарий также удалит все активные нулевые приемники, так что будьте осторожны, но я думаю, что это не так часто встречается при обычном использовании? Я использую это со Skype и OBS, чтобы я мог общаться с людьми и транслировать звук приложений/игр, а также мой микрофон, не зацикливая их звук. Возможно, вам придется перезапустить все, чтобы микрофон появился, но как только он появится, вы можете приложения с горячей заменой без каких-либо проблем.

Вам также необходимо проверить имя вашего микрофона, например, сценарий ниже использует мою веб-камеру.

      #!/bin/bash

SINK_NAME=combined-app-sink
VIRTUAL_MIC_NAME=my-virtualmic
MIC_SOURCE=alsa_input.usb-046d_Logitech_StreamCam_901DCE45-02.analog-stereo

results=$(pw-link -o | grep ${1})
IFS=$'\n' read -ra ADDR -d $'\0' <<< "$results"

# Unload if exists
pactl unload-module module-null-sink

# Make new sinks
pactl load-module module-null-sink media.class=Audio/Sink sink_name=$SINK_NAME channel_map=stereo >> /dev/null
pactl load-module module-null-sink media.class=Audio/Source/Virtual sink_name=$VIRTUAL_MIC_NAME channel_map=front-left,front-right >> /dev/null

# Extract app name
IFS=':'
read -a APP_STR <<< ${ADDR[0]}
echo "Linking app ${APP_STR} to ${SINK_NAME}"
pw-link "${APP_STR}":output_FL $SINK_NAME:playback_FL
pw-link "${APP_STR}":output_FR $SINK_NAME:playback_FR

echo "Linking $MIC_SOURCE to ${SINK_NAME}"
pw-link $MIC_SOURCE:capture_FL  $SINK_NAME:playback_FL
pw-link $MIC_SOURCE:capture_FR  $SINK_NAME:playback_FR

echo "Creating virtual mic: $VIRTUAL_MIC_NAME"
pw-link $SINK_NAME:monitor_FL $VIRTUAL_MIC_NAME:input_FL
pw-link $SINK_NAME:monitor_FR $VIRTUAL_MIC_NAME:input_FR

Можно объединить с https://askubuntu.com/questions/355082/pulseaudio-loopback-unload-audio-output-devices , чтобы сделать выгрузку более интеллектуальной.

Другие вопросы по тегам