Encontrar o volume atual do alto-falante (intensidade do sinal)

Encontrar o volume atual do alto-falante (intensidade do sinal)

Estou tentando criar um widget incrível que controla e monitora o volume.

Obter e definir o volume do alto-falante é fácil no ALSA e no PulseAudio, mas que tal obter a intensidade real do sinal?

Com isto quero dizer o ruído real que você ouve, por exemplo, se nenhum som estiver sendo reproduzido, ele será zero. Exatamente como você veria em um amplificador (o monitor VU).

Normalmente consigo encontrar um arquivo /proc/que contenha algum valor sobre o que está sendo usado (por exemplo, /proc/statpara uso da CPU), mas este não é o caso desta vez.

O objetivo é realmente mostrar uma exibição de áudio em tempo real (de preferência canais L/R separados) que se assemelhe ao monitor VU de ganho de um amplificador.

observe que a questão não é sobre como programar isso para um wm incrível, mas como obter os valores que podem ser usados ​​para fazer isso

Responder1

Não acho que isso seja trivial e essa questão provavelmente deveria ser movida para stackoverflow.

Até onde eu sei, não existe sysfsnenhuma procfsinterface para acessar a mixagem final (ALSA) [áudio]; não há nem garantia de que exista tal coisa no software, já que alguns hardwares (como o emu10k1) realizam sua própria mixagem, embora eu admita que não tenho ideia de como isso funciona.

Há também a questão de múltiplas saídas de áudio (digitais (como SPDIF), analógicas, fones de ouvido ou alto-falantes, etc) e múltiplas configurações de alto-falantes na mesma placa, sem falar na possibilidade de múltiplas placas.

A melhor aposta é provavelmente tentar acessar qualquer dispositivo ALSA usado (provavelmente hw0se a mixagem estiver ocorrendo em um subsistema de som como pulseaudio ou dmixse nenhum subsistema de som for usado), pois esta é a "última etapa" antes que o áudio chegue ao hardware . Dito isto, não tenho ideia se isso é possível; provavelmente não.

Se você assumir que o usuário está usando algo como pulseaudio, a tarefa se tornará muito mais fácil. Softwares comopavucontroljá implementa isso, como visto noReproduçãoguia, bem como estágios de mixagem pré-final emDispositivos de saída. Tecnicamente, isso envolve obter o próprio fluxo de áudio e, em seguida, convertê-lo para o domínio da frequência (por exemplo, realizandoStFt) para visualizá-lo de alguma forma; tudo o que você realmente precisa para isso é acesso ao fluxo de áudio, e o pulseaudio pode fornecer isso (como o pavucontrol) por meio de um coletor.

Não estou ajudando muito, estou? Se eu fosse você e quisesse isso apenas para meu desktop, e se estivesse usando pulseaudio (que eu mesmo uso), meu primeiro objetivo seria tentar obter o fluxo de mixagem final. Os caras emeste tópicoparece ter descoberto um método eloqüente de fazer isso usando apenas pactle pacmd, o que também poderia ser feito facilmente de forma programática.

Quando você consegue o fluxo de áudio, apenas a matemática permanece :-)

informação relacionada