Comutação automática de perfis do PulseAudio com base na contagem de canais de entrada (s)

39

Estou passando o áudio via HDMI para o meu receptor, que tem uma configuração completa do 7.1 conectada a ele. No entanto, a maioria das coisas que eu ouço tem muito menos canais - alguns são mono, a maioria é estéreo, um pouco é 5.1. Quando o receptor é alimentado com o número certo de canais, ele possui vários efeitos de DSP que funcionam razoavelmente bem (por exemplo, ao dividir um canal central, ao enviar a base para o subwoofer, detectar automaticamente o surround da matriz Dolby, etc.). Isso deixa de funcionar se você enviar um sinal completo com um monte de canais silenciosos.

O número de canais de saída no PulseAudio é configurado, por cartão / coletor, pelo perfil atribuído ao cartão. Você pode alterar o perfil atribuído com pacmd , pactl e vários programas GUI.

Como posso configurá-lo para alterar automaticamente o perfil com base no uso do canal no (s) fluxo (s) de entrada? Por exemplo, se os fluxos de entrada estiverem usando apenas front-left e front-right , mude para o perfil estéreo. Se eles estiverem usando a esquerda e a direita também, mude para quadrofônico, etc.

    
por derobert 27.01.2014 / 22:28

1 resposta

1

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.

    
por 15.12.2017 / 15:29