Jak korzystać z wirtualnych strumieni audio PulseAudio do odtwarzania muzyki przez Skype?

20

Próbuję odsłuchać wyjście audio określonego procesu (A) i innego procesu (B), przekierowując wyjście audio A na wejście audio B. Byłoby to równoważne z odtwarzaniem muzyki w Skypie podczas słuchania zarówno muzyki, jak i twojego przyjaciela oraz umożliwienia mu usłyszenia ciebie.

Próbowałem postępować zgodnie z samouczkiem na temat openSUSE (Google „Szukam (może) miksera audio do użytku z Pulse Audio”) na ten temat, a nawet obejrzałem wideo kilka razy. Wcześniej próbowałem JACK, aby dowiedzieć się, że nie rozpozna mojego zestawu słuchawkowego Logitech G35.

Jestem w stanie odtwarzać muzykę, mam zarówno znajomego, jak i słyszę go, ale nie mogę jednocześnie wysłać głosu. To albo mój głos, albo muzyka, którą słyszy mój przyjaciel. Jak mogę również wysłać swój głos?

Niektóre zdjęcia mojej konfiguracji (przy użyciu jednego wyjścia zerowego):

Karta odtwarzania: wprowadź opis zdjęcia tutaj

Karta nagrywania: wprowadź opis zdjęcia tutaj

Jake Thompson
źródło

Odpowiedzi:

23

Po wielu godzinach majsterkowania w końcu to osiągnąłem!

Utworzyłem dwa wyjścia Null i utworzyłem dwa sprzężenia zwrotne dla pierwszego i jedno sprzężenie zwrotne dla drugiego.

pactl load-module module-null-sink sink_name=Virtual1
pactl load-module module-null-sink sink_name=Virtual2
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2

Następnie otworzyłem PulseAudio Volume Control (pavucontrol)

To są moje ustawienia. Pisałem je w kolejności, w jakiej się pojawiają. Liczby idą od góry do dołu.

  • Karta nagrywania:

    • Aplikacje:
      • Wszystkie aplikacje powinny być przesyłane z zestawu słuchawkowego / mikrofonu.
      • Z wyjątkiem aplikacji, do których chcesz wysłać dźwięk, należy ustawić jedną z poniższych opcji. Jeśli TYLKO chcesz wysłać dźwięk: Monitor zerowego wyjścia 1. Będzie to pierwszy „zerowy wynik” na liście. Jeśli chcesz wysłać zarówno dźwięk, jak i głos: Monitor wyjścia zerowego 2. Będzie to drugi „wynik zerowy” na liście.
    • Wirtualne strumienie:
      • Sprzężenie zwrotne do wyjścia zerowego (1): zestaw słuchawkowy / mikrofon
      • Sprzężenie zwrotne z zestawem słuchawkowym / mikrofonem: Null Output 1. Będzie to pierwszy „Null Output” na liście.
      • Sprzężenie zwrotne do wyjścia zerowego: wyjście zerowe 1. Będzie to pierwszy „wynik zerowy” na liście.
  • Karta odtwarzania:

    • Aplikacje:
      • Wszystkie aplikacje powinny być wysyłane do zestawu słuchawkowego / głośnika.
      • Z wyjątkiem aplikacji, które chcesz nagrać / wysłać przez Skype / strumień, powinno być ustawione na Null Output 1. Będzie to pierwszy „Null Output” na liście.
    • Wirtualne strumienie:
      • Sprzężenie zwrotne zestawu słuchawkowego: Wyjście zerowe 2. Będzie to drugie „Wyjście zerowe” na liście.
      • Sprzężenie zwrotne monitora zerowego wyjścia (1): zestaw słuchawkowy.
      • Sprzężenie zwrotne monitora zerowego wyjścia (2): zerowe wyjście 2. Będzie to drugie „zerowe wyjście” na liście.
Jake Thompson
źródło
11

żeby nie pomylić się z „zerowym wyjściem”, wystarczy podać nazwy takie jak to:

pactl load-module module-null-sink sink_name=Virtual1 sink_properties=device.description="NAME HERE (mic+music)"
pactl load-module module-null-sink sink_name=Virtual2 sink_properties=device.description="NAME HERE (only music)"
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2
MikWind
źródło
1

Możliwe jest pójście nawet dalej niż ulepszenie zaproponowane przez @MikWind i skonfigurowanie źródeł urządzeń sprzężenia zwrotnego w czasie tworzenia.

W końcu dostałem skrypt bash, aby ustawić wszystko, co jest stałe:

#!/bin/bash

MICROPHONE="alsa_input.pci-0000_00_1b.0.analog-stereo"
SPEAKERS="alsa_output.pci-0000_00_1b.0.analog-stereo"

# Create the null sinks
# virtual1 gets your audio source (mplayer ...) only
# virtual2 gets virtual1 + micro
pactl load-module module-null-sink sink_name=virtual1 sink_properties=device.description="virtual1"
pactl load-module module-null-sink sink_name=virtual2 sink_properties=device.description="virtual2"

# Now create the loopback devices, all arguments are optional and can be configured with pavucontrol
pactl load-module module-loopback source=virtual1.monitor sink=$SPEAKERS
pactl load-module module-loopback source=virtual1.monitor sink=virtual2
pactl load-module module-loopback source=$MICROPHONE sink=virtual2

Zmagając się kilka godzin, zanim zrozumiałem wystarczająco dużo, aby to zadziałało, opracowałem wyniki badań (skrypt, linki do dokumentacji, wyjaśnienia) w repozytorium git .

Nie jestem pewien, czy jest wystarczająco jasny, aby był użyteczny dla kogokolwiek innego niż ja, ale chciałbym znaleźć tego rodzaju dokumentację, kiedy przeprowadziłem własne badania, więc polecam każdemu, kto próbuje zrobić ten sam rodzaj rzeczy, aby Spójrz.

toadjaune
źródło