¿Hay algo así como un generador de tonos estéreo (canal izquierdo y derecho separados) para Linux? Donde puede configurar el volumen y el tono / tono para cada canal, y preferiblemente también configurar la forma de onda (seno, cuadrado, diente de sierra, ...) e invertir un canal (en oposición al otro).
Si no, ¿alguna idea de un buen lugar para comenzar a hacer uno? Supongo que lo más sencillo sería adaptar los programas existentes como los sintetizadores ... Pero si eso funciona mal, ¿hay alguna biblioteca (como SDL?) Que pueda usarse como base para dicho programa?
Respuestas:
Parece que estás buscando Audacity, que es un editor de audio de código abierto multiplataforma. Una de sus características es permitirle generar tonos. Es un editor de audio multipista, por lo que puede crear fácilmente un tono estéreo.
Debajo del
Generate
menú, puede crear tonos de onda sinusoidal, diente de sierra y cuadrado de frecuencia arbitraria, amplitud y longitud sin la necesidad de grabar o necesitar archivos de entrada adicionales.fuente
Puede mirar
speaker-test
, que (en una máquina Arch) encuentro en el paquete alsa-utils.speaker-test -c2 -t sine
desde una xterm, me dio una onda sinusoidal de 440 Hz durante unos 6 segundos cada uno, alternando los altavoces izquierdo y derecho. En el xterm, proporcionó información sobre qué altavoz creía que estaba usando.Según la página del manual, puede hacer ondas sinusoidales de frecuencia arbitraria y ruido rosa.
fuente
speaker-test -c2 -t sine -f 440
complementará su ejemplo dando el parámetro de frecuencia. Gracias.El
siggen
programa debería hacer el truco.Tiene dos canales con señales independientes y una fase entre ellos. Cada canal puede hacer estos tipos de señal:
Puede ejecutarlo en modo estéreo como este:
Dado que
/dev/dsp
está en desuso en la mayoría de las distribuciones de Linux modernas, probablemente necesitará instalar una biblioteca de compatibilidad. En distribuciones basadas en Debian , instale elalsa-oss
paquete y ejecútelo así:También puedes probarlo con PulseAudio OSS Wrapper:
fuente
ffmpeg
ffmpeg puede hacerlo, como siempre.
Cree un
out.wav
archivo de sonido sinusoidal mono 1000Hz de 5 segundos :Estéreo en su lugar:
El archivo será 2 veces más grande y
ffprobe
dirá que tiene en2 channels
lugar de1 channel
.Reproduzca el audio durante 5 segundos sin crear un archivo:
Juega para siempre hasta que te vuelvas loco:
Documentación:
La otra sección de fuentes de Sunder Audio documenta otros algoritmos útiles de generación de sonido además de
sine
, por ejemplo:anoisesrc
: ruidos de varios colores, p. ej. blanco, rosa, marrónaevalsrc
toma expresiones matemáticas arbitrarias y, por lo tanto, debería ser capaz de producir formas de onda triangulares (expresión TODO)Bibliografía:
Probado en Ubuntu 18.04, ffmpeg 3.4.6.
Ejemplo de generación de audio C mínima sin bibliotecas adicionales
Solo por diversión: /programming/732699/how-is-audio-represented-with-numbers-in-computers/36510894#36510894
fuente
El programa saugns también puede hacerlo. (Es un generador de audio de línea de comandos (actualmente) que admite 8 tipos de onda y técnicas de modulación FM / PM / AM).
Para generar dos ondas estéreo de 100 Hz, una sinusoidal y otra un triángulo, y una con amplitud invertida, el siguiente script se puede pegar en un archivo y ejecutar a través del programa (como en
./saugns filename
):Los
t
s especifican el tiempo, en segundos.Los
P
s son para panoramización por voz (0.0 = izquierda, 1.0 = derecha). Esto puede cambiarse a algo diferente aP
las versiones futuras; el archivo README describe la sintaxis actual.Editar: De hecho, soy el desarrollador del programa.
Además, una forma alternativa de cambiar la amplitud (para algunos tipos de onda, por ejemplo,
sin
pero nosaw
), es establecer la fase en minúsculasp
. Agregarp0.5
conjuntos de fase al 50% del ciclo de onda (mitad negativa). Además, como no hay un tipo de coseno con nombre,p0.25
es la forma de convertir el seno en coseno (op0.75
para coseno negativo).fuente
Quizá estés buscando Gnaural .
fuente
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 procesarpaplay
.La canalización es tediosa, así que creé un script:
p.ej
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 lapaplay
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 .
fuente