Pulseaudio loopback descarga dispositivos de salida de audio

12

Estoy tratando de descubrir cómo descargar las salidas de loopback de pulseaudio. Estoy usando pulseaudio para crear una mezcla de loopback para capturar mi micrófono y el audio del sistema para la transmisión. Cada vez que inicio mi script que tiene este código:

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

deja dos dispositivos de salida tras cerrar. El comando unload-module se deshace de la grabación pero no puedo encontrar un comando para las salidas.

AkBKukU
fuente

Respuestas:

17

La forma adecuada de descargar módulos

La descarga de un módulo cargado en Pulse Audio se realiza mediante el número de índice del módulo, que se proporciona al cargar:

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

En el ejemplo anterior, el servidor Pulseaudio cargó el módulo con la identificación del índice 24. Este módulo se puede descargar con el siguiente comando:

pactl unload-module 24

Su script tendrá que analizar la salida de pactl.

En caso de que no sepamos el número del módulo, podemos emitir el siguiente comando que mostrará el número y el nombre del módulo:

pactl list short modules

Las versiones más nuevas también permiten la descarga por nombre:

pactl unload-module <name>

El método rápido y sucio.

Si pulseaudio está configurado como demonio de desove automático (que debería ser el comportamiento predeterminado), podemos descargar rápidamente todos los módulos cargados después de iniciar sesión con un reinicio del servidor PulseAudio para cargar los módulos predeterminados definidos en nuestro default.paejecutando:

pulseaudio -k

Esto descargará efectivamente todos los módulos de su script y cargará el sumidero predeterminado para la salida.

Takkat
fuente
Vale la pena mencionar que no todas las aplicaciones se recuperarán al cortar sus transmisiones.
Aurelia
Obtenga el número de módulo por nombre de sumidero: 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]+")dónde MY-SINK-NAMEestá lo que dice. Mantenga el < >en el código!
KrisWebDev
1
@KrisWebDev: gracias, agregó una línea sobre cómo obtener índices de módulos para un enfoque más general.
Takkat
Grande, entonces esto se convierte en: pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Tiene la ventaja de eliminar TODOS los módulos nombrados MY-SINK-NAME(los nombres de sumidero no son únicos).
KrisWebDev