Sprzężenie zwrotne Pulseaudio zwalnia urządzenia wyjściowe audio

12

Próbuję dowiedzieć się, jak rozładować wyjścia pętli zwrotnej pulseaudio. Używam pulseaudio do stworzenia miksu pętli zwrotnej do przechwytywania mojego mikrofonu i dźwięku systemowego do streamingu. Za każdym razem, gdy uruchamiam skrypt, który ma ten kod:

pactl load-module module-null-sink sink_name=mix 
pactl load-module module-loopback sink=mix
pactl load-module module-loopback sink=mix

avconv ...

pactl unload-module module-loopback

po zamknięciu pozostawia dwa urządzenia wyjściowe. Polecenie unload-module pozbywa się jednego z nagrywania, ale nie mogę znaleźć polecenia dla wyjść.

AkBKukU
źródło

Odpowiedzi:

17

Odpowiedni sposób na rozładowanie modułów

Rozładowanie modułu załadowanego do Pulse Audio odbywa się poprzez numer indeksu modułu, który jest podawany podczas ładowania:

pactl load-module module-null-sink sink_name=test
24

W powyższym przykładzie serwer Pulseaudio załadował moduł z indeksem id 24. Ten moduł można zwolnić za pomocą następującego polecenia:

pactl unload-module 24

Twój skrypt będzie musiał przeanalizować dane wyjściowe pactl.

Jeśli nie znamy numeru modułu, możemy wydać następujące polecenie, które wyświetli numer i nazwę modułu:

pactl list short modules

Nowsze wersje umożliwiają również rozładunek według nazwy:

pactl unload-module <name>

Szybka i brudna metoda

Jeśli pulseaudio jest skonfigurowane jako demon automatycznie spawnujący (który powinien być domyślnym początkującym), możemy szybko zwolnić wszystkie moduły załadowane po zalogowaniu z resetem serwera PulseAudio, aby załadować domyślne moduły zdefiniowane w naszym default.pa, uruchamiając:

pulseaudio -k

To skutecznie zwolni wszystkie moduły ze skryptu i załaduje domyślny ujście dla danych wyjściowych.

Takkat
źródło
Warto wspomnieć, że nie wszystkie aplikacje odzyskają się po odcięciu ich strumieni.
Aurelia,
Uzyskaj numer modułu według nazwy zlewu: MODULE_NUMBER=$(pacmd list-sinks | grep -E "^\s*name:|^\s*module:" | grep -A 1 -E "^\s*name: <MY-SINK-NAME>" | grep -oP "module: \K[0-9]+")gdzie MY-SINK-NAMEjest to, co mówi. Zachowaj < >kod!
KrisWebDev
1
@KrisWebDev: dzięki, dodano wiersz o tym, jak uzyskać indeksy modułów dla bardziej ogólnego podejścia.
Takkat
Wielki, to staje się: pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Ma tę zaletę, że usuwa WSZYSTKIE moduły o nazwie MY-SINK-NAME(nazwy ujścia nie są unikalne).
KrisWebDev