Eu quero construir meu primeiro projeto em áudio. Eu quero criar um visualizador com OpenGL. Acredite em mim, eu fiz muitos designs únicos que ficarão ótimos como visualizador.
Eu quero pegar a saída do pulseaudio, então fazer um FFT sobre isso, depois desenhar padrões com base nisso. Mas eu não entendo o primeiro ponto, como pegar a saída pulseaudio?
Programas como o gravador de tela simples e o programador cli-visualizer são duas das instâncias que funcionam perfeitamente.
Alguém pode sugerir como faço para pegar a saída bruta do pulseaudio para fazer FFT nisso?
Você não "pega" a saída do Pulseaudio.
Faça a mesma coisa que
pavucontrol
faz para osoutput
medidores de nível de potência da guia: Conecte-se à.monitor
entrada de uma pia, leia os dados de som dela, visualize da maneira que desejar. Faça para quantas pias forem necessárias.O código-fonte de
pavucontrol
deve ser suficiente para você começar.Com base na resposta do dirkt, escrevi um pequeno programa que pega o coletor padrão do PulseAudio e grava dados PCM brutos em um arquivo. Supondo que você tenha um cliente PulseAudio em execução, você precisa solicitar as informações do servidor PA primeiro:
A estrutura de informações do servidor contém o nome do coletor padrão. Isso é "para onde vai o áudio" a caminho da placa de som. Como dirkt afirmou, podemos nos conectar
sink_name.monitor
para ouvir o referido coletor.Para fazer isso, primeiro crie um novo fluxo, configure retornos de chamada e, finalmente, conecte-o para gravação.
No callback read os dados estão disponíveis via
pa_stream_peek()
. Certifique-se de consultar os documentos pa_stream_peek() para saber quandopa_stream_drop()
depois de espiar!Ao programar isso, achei os documentos da API do PulseAudio muito úteis e bem escritos.