Puede sintetizar tonos fácilmente con SoX. Hubo algunos obstáculos, pero finalmente pude resolverlo.
Tuve problemas para interconectar SoX con PulseAudio, así que simplemente canalizo sox
datos sin procesar paplay
.
La canalización es tediosa, así que creé un 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
p.ej
sox-paplay synth sine 1000 gain -5 remix -m 0 0 1 0 0 0
El remix
efecto solo se usa para enviar el resultado a un canal específico. Es mucho más potente, pero aquí solo usamos la funcionalidad básica. En este ejemplo, tenemos un dispositivo de seis canales y estamos enviando un tono al tercer canal.
Originalmente creé un dispositivo ALSA que envolvía el dispositivo PulseAudio, pero luego descubrí que es imposible controlar la asignación de canales utilizando ALSA, por lo que los canales aleatorios se mezclaron de acuerdo con la forma en que mi mapa de canales personalizado difería del valor predeterminado de ALSA. Esto es por lo que tengo --no-remix --no-remap
en la paplay
anterior; Solo quiero que se ordene el canal sin procesar para el comando sox.
Desearía que las cosas de audio en Linux tuvieran mejor documentación e informes de errores.
Puede que le interese una respuesta que publiqué recientemente que muestra cómo configurar el ecualizador PulseAudio desde la línea de comandos .