Encontrando o volume atual do alto-falante (força do sinal)

4

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

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

Com isso quero dizer o ruído real que você ouve, por exemplo se nenhum som estiver tocando, é zero. Assim como você veria de um amplificador (o monitor VU).

Geralmente consigo encontrar um arquivo em /proc/ que tenha algum valor sobre o que está sendo usado (por exemplo, /proc/stat para uso da cpu), mas esse não é o caso desta vez.

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

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

    
por romeovs 10.04.2012 / 01:21

1 resposta

1

Eu não acho que isso seja trivial, e essa pergunta provavelmente deve ser movida para stackoverflow.

Até onde eu sei, não há interface sysfs ou procfs para acessar o mix final (ALSA) [audio]; não há sequer uma garantia de que exista tal coisa no software, já que alguns hardwares (como emu10k1 ) executam sua própria mixagem, embora eu não tenha idéia de como isso funciona.

Há também a questão de várias saídas de áudio (digitais (como SPDIF), analógicas, headphons ou alto-falantes, etc) e várias configurações de alto-falante no mesmo cartão, sem mencionar a possibilidade de vários cartões.

A melhor aposta é presumivelmente tentar tocar em qualquer dispositivo ALSA usado (provavelmente hw0 se a mixagem está ocorrendo em um subsistema de som como pulseaudio, ou dmix se nenhum subsistema de som for usado), já que este é o "último passo" antes do áudio chegar ao hardware. Dito isto, não tenho ideia se isso é possível; provavelmente não.

Se você puder assumir que o usuário está usando algo como pulseaudio, a tarefa se torna muito mais fácil. Softwares como o pavucontrol já implementam isso, como visto na Reprodução guia, assim como os estágios de pré-mistura final em Dispositivos de saída . Tecnicamente, isso envolve obter o próprio fluxo de áudio e, em seguida, convertê-lo no domínio da frequência (por exemplo, executando StFt ) para visualizá-lo de alguma maneira; tudo o que você realmente precisa para isso é o acesso ao fluxo de áudio, e pulseaudio pode fornecer isso (como o pavucontrol faz) através de uma pia.

Eu não estou sendo de muita ajuda, estou? Se eu fosse você e apenas quisesse isso para minha área de trabalho, e se eu estivesse usando pulseaudio (que eu mesmo utilizo), meu primeiro objetivo seria tentar obter o fluxo final de mixagem. Os caras em este tópico parecem ter descoberto um método eloqüente de fazer isso usando apenas pactl e pacmd , o que poderia facilmente ser feito programaticamente também.

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

    
por 11.04.2012 / 18:05

Tags