Il loopback Pulseaudio scarica i dispositivi di uscita audio


12

Sto cercando di scoprire come scaricare le uscite loopback pulseaudio. Sto usando pulseaudio per creare un mix loopback per catturare il mio microfono e l'audio del sistema per lo streaming. Ogni volta che lancio il mio script che ha questo codice:

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

lascia dietro di sé due dispositivi di uscita dopo la chiusura. Il comando unload-module si sbarazza di quello di registrazione ma non riesco a trovare un comando per gli output.

Risposte:


17

Il modo appropriato per scaricare i moduli

Lo scarico di un modulo caricato su Pulse Audio avviene tramite il numero indice del modulo, che viene fornito al caricamento:

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

Nell'esempio sopra il server Pulseaudio ha caricato il modulo con ID indice 24. Questo modulo può essere scaricato con il seguente comando:

pactl unload-module 24

Il tuo script dovrà analizzare l'output di pactl.

Nel caso in cui non conosciamo il numero del modulo, possiamo emettere il seguente comando che visualizzerà il numero e il nome del modulo:

pactl list short modules

Le versioni più recenti consentono anche di scaricare per nome:

pactl unload-module <name>

Il metodo rapido e sporco

Se pulseaudio è impostato come demone auto-spawn (che dovrebbe essere il begaviour predefinito) potremmo scaricare rapidamente tutti i moduli caricati dopo il login con un reset del server PulseAudio per caricare i moduli predefiniti definiti nel nostro default.paeseguendo:

pulseaudio -k

Ciò scaricherà efficacemente tutti i moduli dallo script e caricherà il sink predefinito per l'output.


Vale la pena ricordare che non tutte le applicazioni si riprenderanno dopo aver tagliato i loro flussi.
Aurelia,

Ottieni il numero del modulo tramite il nome del sink: 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]+")dov'è MY-SINK-NAMEciò che dice. Conserva il < >nel codice!
KrisWebDev,

1
@KrisWebDev: grazie, aggiunta una riga su come ottenere gli indici dei moduli per un approccio più generale.
Takkat,

Grande, allora questo diventa: pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Ha il vantaggio di eliminare TUTTI i moduli denominati MY-SINK-NAME(i nomi dei sink non sono univoci).
KrisWebDev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.