Não é muito de uma resposta, mas posso descrever os problemas / possibilidades que encontrei.
Não vejo como gravar um script de shell para isso. Não há nenhuma maneira (documentada) de alterar os volumes por aplicativo usando pactl
/ pacmd
. Nem consigo ver uma maneira de saber quando um novo cliente é adicionado sem consultar repetidamente algo como:
pactl list short clients
O pulso de áudio pode ser configurado para logar através de syslog
, então uma possibilidade é ter um script chamado via rsyslog
(se a distro o tiver). Veja minha resposta aqui para uma indicação de como fazer isso. Isso obviamente depende de pulseaudio
informações de registro sobre novos clientes.
Isso é definitivamente factível, o programa pavucontrol
é um excelente exemplo desse tipo de coisa sendo feita. No entanto, atualmente parece que não há nenhuma CLI para fazer o mesmo material, portanto, provavelmente será necessária uma interface mais direta para a API pulseaudio
.
Atualizar
Analisando o link do @derobert , o módulo de ducking de funções seria bastante fácil de ativar, mas requer a especificação de propriedades media.role
. Eu não consigo encontrar de qualquer maneira para ver o que são estes! É provável que eles não estejam definidos para muitos fluxos (muitos programas ainda acham que estão usando o ALSA). Se houver alguma maneira listar estes e talvez configurá-los para ser atribuído (talvez com base no nome do processo), esta seria a maneira mais fácil.
Atualização 2
media.role
pode ser definido por meio da variável ambiental PULSE_PROP
. Por exemplo:
PULSE_PROP='media.role=music' play some_music.mp3 &
pactl list clients | grep -C 10 'media.role = "music"'
Isso pode ser definido para aplicativos diferentes editando .desktop
arquivos e / ou criando scripts de wrapper, mas isso não parece ser uma maneira muito boa.