O loopback Pulseaudio descarrega dispositivos de saída de áudio

11

Estou tentando descobrir como descarregar saídas de loopback do pulseaudio. Estou usando o pulseaudio para criar um mix de loopback para capturar o microfone e o áudio do sistema para streaming. Toda vez que eu lanço meu script que tem 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

deixa dois dispositivos de saída para trás depois de fechar. O comando unload-module se livra do comando de gravação, mas não consigo encontrar um comando para as saídas.

AkBKukU
fonte

Respostas:

16

A maneira apropriada de descarregar módulos

O descarregamento de um módulo carregado no Pulse Audio é feito pelo número de índice do módulo, fornecido no carregamento:

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

No exemplo acima, o servidor Pulseaudio carregou o módulo com o ID do índice 24. Este módulo pode ser descarregado com o seguinte comando:

pactl unload-module 24

Seu script precisará analisar a saída de pactl.

Caso não conheçamos o número do módulo, podemos emitir o seguinte comando, que exibirá o número e o nome do módulo:

pactl list short modules

As versões mais recentes também permitem o descarregamento por nome:

pactl unload-module <name>

O método rápido e sujo

Se o pulseaudio estiver configurado como demônio de geração automática (que deve ser o início padrão), podemos descarregar rapidamente todos os módulos carregados após o login com uma redefinição do servidor PulseAudio para carregar os módulos padrão definidos em nosso default.paexecutando:

pulseaudio -k

Isso efetivamente descarregará todos os módulos do seu script e carregará o coletor padrão para saída.

Takkat
fonte
Vale ressaltar que nem todas as aplicações se recuperam do corte de seus fluxos.
Gant
Obtenha o número do módulo pelo nome do coletor: 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]+")onde MY-SINK-NAMEestá o que diz. Mantenha < >o código!
KrisWebDev
11
@KrisWebDev: obrigado, adicionou uma linha sobre como obter índices de módulos para uma abordagem mais geral.
Takkat
Ótimo, então isso se torna: pactl list short modules | grep "sink_name=MY-SINK-NAME" | cut -f1 | xargs -L1 pactl unload-module. Tem a vantagem de excluir TODOS os módulos nomeados MY-SINK-NAME(nomes de coletores não são exclusivos).
KrisWebDev