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: -)