Estou executando o áudio através de HDMI no meu receptor, que possui uma configuração 7.1 completa conectada a ele. No entanto, a maioria das coisas que ouço tem muito menos canais - alguns são mono, outros são estéreo, outros são 5.1. Quando o receptor é alimentado com o número certo de canais, ele possui vários efeitos DSP que funcionam bastante bem (por exemplo, na divisão de um canal central, no envio de base para o subwoofer, na detecção automática de surround de matriz Dolby, etc.). Isso deixa de funcionar se você enviar um sinal 7.1 completo com vários 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 pacmd
, pactl
e vários programas gráficos.
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 a frente esquerda e a frente direita, mude para o perfil estéreo. Se eles estiverem usando as costas esquerda e traseira direita, mude para quadrofônico etc.
fonte
mediainfo
orffmpeg
ouavconv
) e usepacmd
para selecionar o perfil apropriado antes de iniciar o player. Do ponto de vista lógico, espero que funcione, desde que você esteja reproduzindo um áudio por vez.Respostas:
Este é apenas um conceito e nenhuma solução completa:
Você pode administrar seus próprios eventos
patcl subscribe
se puder atribuir configurações a clientes pulsaudio (por exemplo, se o reprodutor de filmes se conectar, você alterna para a configuração 7.1, caso contrário, usa a configuração estéreo). Você obterá um fluxo constante de eventospatcl subscribe
, dos quais poderá lidar observando as conexões do cliente. Então você pode simplesmente chamar pactl / pacmd para alterar o perfil.Exemplo de saída do pactl subscrever:
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, o vlc pode reproduzir um vídeo 5.1 ou 7.1). Não encontrei uma maneira de obter o número de canais realmente usados de um cliente pulseaudio sobre o pactl, mas talvez eu tenha perdido algumas opções aqui. Como alternativa, você também pode conectar-se ao aplicativo de reprodutor de vídeo e obter o formulário de bits ausentes lá.
fonte
pactl list | grep format.channels
você deve ser capaz de descobrir o max. Nº de canais usados (e mais informações também). O uso dessas informações em um script acionado por eventos registrados pode levar a uma solução.