Pulseaudio Loopback entladen Audioausgabegeräte

12

Ich versuche herauszufinden, wie man Pulseaudio-Loopback-Ausgänge entlädt. Ich verwende pulseaudio, um einen Loopback-Mix zu erstellen, mit dem ich mein Mikrofon und Systemaudio für das Streaming aufzeichnen kann. Jedes Mal, wenn ich mein Skript starte, das diesen Code enthält:

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

Nach dem Schließen bleiben zwei Ausgabegeräte zurück. Der Befehl unload-module entfernt den Aufnahmebefehl, aber ich kann keinen Befehl für die Ausgänge finden.

AkBKukU
quelle

Antworten:

17

Der geeignete Weg, um Module zu entladen

Das Entladen eines in Pulse Audio geladenen Moduls erfolgt anhand der Indexnummer des Moduls, die beim Laden angegeben wird:

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

Im obigen Beispiel hat der Pulseaudio-Server das Modul mit der Index-ID geladen 24. Dieses Modul kann mit folgendem Befehl entladen werden:

pactl unload-module 24

Ihr Skript muss die Ausgabe von analysieren pactl.

Falls wir die Modulnummer nicht kennen, können wir den folgenden Befehl ausgeben, der die Nummer und den Modulnamen anzeigt:

pactl list short modules

Neuere Versionen ermöglichen auch das Entladen nach Namen:

pactl unload-module <name>

Die schnelle und schmutzige Methode

Wenn pulseaudio als Auto-Spawning-Dämon eingerichtet ist (was das Standardverhalten sein sollte), können wir nach dem Anmelden mit einem Reset des PulseAudio-Servers geladene Module schnell entladen, um die in unserem Programm definierten Standardmodule zu laden, indem wir Folgendes ausführen default.pa:

pulseaudio -k

Dadurch werden alle Module effektiv aus Ihrem Skript entladen und die Standardsenke für die Ausgabe geladen.

Takkat
quelle
Erwähnenswert ist, dass sich nicht alle Anwendungen davon erholen, dass ihre Streams abgeschnitten wurden.
Aurelia
Ermitteln Sie die Modulnummer anhand des Senkennamens: 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]+")Wo MY-SINK-NAMEsteht das, was darauf steht? Behalte das < >im Code!
KrisWebDev
1
@KrisWebDev: Danke, eine Zeile hinzugefügt, wie man Modulindizes für einen allgemeineren Ansatz erhält.
Takkat
Großartig, dann wird dies : pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Es hat den Vorteil, dass ALLE benannten Module gelöscht werden MY-SINK-NAME(Senkennamen sind nicht eindeutig).
KrisWebDev