Você pode sintetizar facilmente tons com o SoX. Havia alguns obstáculos, mas finalmente consegui descobrir.
Eu tive problemas para fazer uma interface do SoX com o PulseAudio, apenas inserindo sox
dados brutos paplay
.
O pipeline é tedioso, então eu criei um script:
$ cat sox-paplay
#!/bin/bash
: ${HZ:=44100}
: ${NCHAN:=6}
: ${SINK:=mysink}
sox -c $NCHAN -n -t raw -r $HZ -L -b 16 - "$@" | paplay --no-remix --no-remap --raw -v -p --rate $HZ -d $SINK --channels $NCHAN
por exemplo
sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0
O remix
efeito é usado apenas para enviar o resultado para um canal específico. É muito mais poderoso, mas usamos apenas a funcionalidade básica aqui. Neste exemplo, temos um dispositivo de seis canais e estamos enviando um tom para o terceiro canal.
Originalmente, criei um dispositivo ALSA envolvendo o dispositivo PulseAudio, mas então achei impossível controlar o mapeamento de canais usando o ALSA; portanto, canais aleatórios estavam se misturando de acordo com a diferença entre meu mapa de canais personalizado e o padrão ALSA. É por isso que eu tenho --no-remix --no-remap
em paplay
cima; Eu só quero o canal bruto pedindo o comando sox.
Eu meio que gostaria que as coisas de áudio no Linux tivessem uma melhor documentação e relatórios de erros.
Você pode estar interessado em uma resposta que publiquei recentemente, mostrando como definir o equalizador do PulseAudio na linha de comando .