Este é apenas um conceito e não há solução completa:
Você pode fazer seu próprio tratamento de eventos com patcl subscribe
se puder atribuir configurações a clientes pulsaudio (por exemplo, se o reprodutor de filmes se conecta, você alterna para a configuração 7.1, caso contrário, você usa a configuração estéreo). Você obterá um fluxo constante de eventos de patcl subscribe
, que você pode manipular observando as conexões do cliente. Então você pode simplesmente chamar o pactl / pacmd para alterar o perfil.
Exemplo de saída de pactl subscribe:
$ pactl subscribe
Event 'change' on sink #0
Event 'remove' on sink-input #93
Event 'change' on sink #0
Event 'change' on source #0
Event 'change' on sink #0
Event 'change' on source #0
Event 'new' on sink-input #98
Event 'change' on sink-input #98
Observe que você ainda tem o problema de lidar com casos em que você tem vários clientes com um número diferente de canais.
Além disso, a abordagem acima é bastante limitada. As configurações por aplicativo não são suficientes para detectar o número real de canais usados do aplicativo (por exemplo, vlc pode reproduzir um vídeo 5.1 ou 7.1). Eu não encontrei uma maneira de obter o número de canais realmente usados de um cliente pulseaudio sobre o pactl, mas eu poderia ter perdido algumas opções aqui. Como alternativa, você também pode se conectar ao aplicativo de player de vídeo e obter os bits ausentes dele.