Estéreo "generador de tonos" para Linux?


14

¿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?


Es posible que pueda hacerlo con sox.
Renan

Respuestas:


15

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 Generatemenú, 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.


¿Pero puede generar tonos "de la nada"? Y no tengo la intención de grabar y reproducir nada, solo generar dos tonos ligeramente diferentes (uno para cada canal) "por la eternidad".
Baard Kopperud

1
@BaardKopperud Sí, actualicé mi respuesta para aclarar.
j883376

8

Puede mirar speaker-test, que (en una máquina Arch) encuentro en el paquete alsa-utils.

speaker-test -c2 -t sinedesde 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.


1
speaker-test -c2 -t sine -f 440complementará su ejemplo dando el parámetro de frecuencia. Gracias.
Christian

4

El siggenprograma debería hacer el truco.

captura de pantalla de siggen

Tiene dos canales con señales independientes y una fase entre ellos. Cada canal puede hacer estos tipos de señal:

  • seno
  • coseno
  • cuadrado
  • triángulo
  • diente de sierra
  • legumbres
  • ruido

Puede ejecutarlo en modo estéreo como este:

$ siggen -2

Dado que /dev/dspestá 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 el alsa-osspaquete y ejecútelo así:

$ aoss siggen -2

También puedes probarlo con PulseAudio OSS Wrapper:

$ padsp siggen -2

Obtengo: [siggen] Error de entrada / salida: / dev / dsp
Ole Tange

Hm. ¿Ayuda el envoltorio PulseAudio OSS?
Nathaniel M. Beaver

Sí. Funcionó.
Ole Tange

3

ffmpeg

ffmpeg puede hacerlo, como siempre.

Cree un out.wavarchivo de sonido sinusoidal mono 1000Hz de 5 segundos :

sudo apt-get install ffmpeg
ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" out.wav

Estéreo en su lugar:

ffmpeg -f lavfi -i "sine=frequency=1000:duration=5" -ac 2 out.wav

El archivo será 2 veces más grande y ffprobedirá que tiene en 2 channelslugar de 1 channel.

Reproduzca el audio durante 5 segundos sin crear un archivo:

ffplay -f lavfi -i "sine=frequency=1000:duration=5" -autoexit -nodisp

Juega para siempre hasta que te vuelvas loco:

ffplay -f lavfi -i "sine=frequency=1000" -nodisp

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ón
  • aevalsrc 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


1

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

Osin f100 a0.5 t2 P0
Otri f100 a(-0.5) t2 P1

Los ts especifican el tiempo, en segundos.

Los Ps son para panoramización por voz (0.0 = izquierda, 1.0 = derecha). Esto puede cambiarse a algo diferente a Plas 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, sinpero no saw), es establecer la fase en minúsculas p. Agregar p0.5conjuntos de fase al 50% del ciclo de onda (mitad negativa). Además, como no hay un tipo de coseno con nombre, p0.25es la forma de convertir el seno en coseno (o p0.75para coseno negativo).


Hola joel Bienvenido a Unix y Linux . He votado tu respuesta ya que es una excelente primera publicación. Pensé que mencionaría que si usted es el encargado de mantener o desarrollar un proyecto, es una práctica estándar divulgar esta información. Aunque no es realmente un problema para el software GPL, vale la pena estar al tanto de unix.stackexchange.com/help/promotion Para el software de utilidad Free / Libre, me imagino que sería más probable que se upvoted en este sitio si los usuarios saben Eres uno de los desarrolladores detrás del proyecto.
Anthony Geoghegan

0

Quizá estés buscando Gnaural .


3
Sería mejor editar esta respuesta para incluir más información sobre cómo este programa proporciona las características que se le están solicitando, de manera similar a las otras respuestas publicadas anteriormente.
Anthony Geoghegan

0

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 soxdatos 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 remixefecto 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-remapen la paplayanterior; 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 .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.