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.

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.