Publi

Cómo generar ruido de diferentes colores en GNU/Linux


Los científicos siempre inventan formas curiosas de clasificar los fenómenos (físicos en este caso). Y es que, donde los seres humanos normales escuchan un sonido sin sentido, muchos científicos ven estadística. ¿Y qué tiene que ver eso con los colores?

Explicación física muy rápida de 0 a 100 en 400 palabras

No quiero extenderme mucho, y seguro que en mi explicación faltarán cosas y algunos conceptos serán inexactos. Más que nada porque en Wikipedia podéis encontrar muchísima información sobre el tema. Y si sabes lo que es una onda, su frecuencia, un espectro, un ruido y un color, te puedes saltar este apartado rápidamente.

Básicamente el sonido es una onda. Estas ondas son perturbaciones físicas que se propagan en una dirección determinada. Dichas perturbaciones pueden ser muy complejas, pero por sus características podemos descomponerlas en ondas simples. Una onda simple puede ser un tono, es una oscilación a un ritmo constante, subiendo y bajando, suavemente. Ésta tiene una frecuencia determinada; dicha frecuencia es el número de veces por segundo que la perturbación tiene una amplitud determinada.

Podemos observar cómo la misma nota musical producida por varios instrumentos diferentes (una característica de una nota musical es precisamente la frecuencia principal de la onda que produce el instrumento) tiene un sonido diferente y es que las propiedades del instrumento hacen que no sólo se produzca la frecuencia básica de la nota, sino muchas otras frecuencias que le dan cuerpo a dicho sonido y lo hacen más complejo.

Pero volviendo al tema del post, ¿qué es el ruido? El ruido, en lo que se refiere al sonido puede ser un sonido molesto, aunque no siempre será molesto. Lo podemos considerar como una señal sin sentido, que no está transmitiendo información o que interfiere con información de otra fuente de audio. Por ejemplo, cuando intentamos escuchar una conversación y de repente un vecino se pone a hacer agujeros con un taladro, eso es ruido. Pero los físicos, no tardaron mucho en darse cuenta de que hay muchos tipos de ruido. Vamos, si lo que queremos hacer con un ruido es interferir y dificultar la escucha de otros sonidos, lo mejor es que el ruido sea un sonido compuesto por la mayor cantidad de frecuencias audibles. Y dado que el oído humano se considera entre los 20Hz y los 20KHz, digo se considera, porque pocos son capaces de escuchar dichas frecuencias, las frecuencias del espectro sonoro estarán comprendidas entre esos dos valores. En este caso, un sonido inferior a los 20Hz será un infrasonido y si es superior a los 20KHz será un ultrasonido.
Descomposición de la luz blanca en todos los colores del espectro
Por otro lado, la luz tiene propiedades de onda electromagnética, con su frecuencia, y amplitud, y claro, existe lo llamado luz visible. Dicho espectro comprende el rango de frecuencias que son visibles por el ojo humano, que va desde los 3,84×1014Hz (384THz) a los 7,89×10^14 Hz (789THz), sí, ¡teraherzios! Aunque para definir la luz se suele utilizar más la longitud de onda: desde 7,8×10^−7 m a 3,8×10^-7 m. Las frecuencias más bajas corresponden con el rojo y las más altas con el violeta, por eso, frecuencias inferiores en dicho rango serán infrarrojos y frecuencias superiores serán ultravioletas. Y los valores de frecuencia intermedios darán lugar a todos los colores que podemos ver. Incluso se pueden mezclar, por ejemplo, el blanco es una onda compleja que vibra en varias frecuencias del espectro visible.

Mezclando las cosas

Después de una explicación muy rápida e inexacta. Tenemos que saber que una de las formas de caracterizar un sonido es su gráfica de densidad espectral de potencia (DEP o PSD Power Spectral Density). Es decir, representamos gráficamente la potencia con la que suena cada frecuencia. Y en muchos casos, si hiciéramos lo mismo con la luz, te saldría el color al que hace referencia.

El post se centrará en la generación de estos sonidos desde GNU/Linux, y utilizando software libre. Muchas veces los algoritmos pueden ser muy complicados, aunque estos sonidos podemos generarlos en tiempo real sin problema.

Usos del ruido

El ruido, se suele utilizar para calibrar aparatos de audio, sintetizar voz o instrumentos, generar números aleatorios, camuflar sonidos, relajación o una ayuda para conciliar el sueño, incluso, en mi caso personal, enmascarar tinnitus o acúfenos. Este fenómeno, hace que muchos escuchemos sonidos que en realidad no están y que se producen en alguna parte de nuestro circuito acústico. Puede deberse a un taponamiento de conductos, o tensión muscular, otros problemas del oído medio, problemas en la cóclea (también llamada caracol) o incluso en la interpretación que hace nuestro cerebro de los datos recibidos en el oído. El resultado es escuchar golpeteos, grillos, tonos, motores, etc que en realidad no están sonando y nadie más escucha, en algunos momentos del día (o durante las 24h).

Aunque existen medicamentos, en muchos casos no funcionan, porque en realidad es muy difícil detectar qué parte del circuito falla y por qué. Por lo que hay tratamientos de fisioterapia, se usan relajantes musculares, vitaminas y gran variedad de fármacos de diferente índole. Además de esto existen terapias de habituación, terapias sonoras y muchas más cosas. Y con respecto a las terapias sonoras una de las cosas que merece la pena probar es escuchar diferentes tipos de ruido. El objetivo de este ruido por un lado es tapar o enmascarar el sonido que se escucha y por otro lado, alejar la atención de él.

La clave en muchos casos es no prestarle atención, por lo que, incluso escuchando diferentes tipos de ruido puede que sigamos escuchando el acúfeno si nos empeñamos. Pero algunos tipos de ruido tienen mejor resultado que otros, así que es interesante darles una oportunidad, respirar hondo y aguantar aunque sea una hora escuchándolo mientras estás realizando cualquier tarea.

Listos para escuchar

Aunque en Internet encontramos multitud de páginas web con sonidos para descargar. Muchas veces necesitamos retocar un poco la onda del ruido, o queremos generar elel ruido. Necesitamos un archivo con el ruido con una longitud específica, o incluso si no queremos que nuestro sistema consuma demasiados recursos. Sé que muchos, cuando necesitan este tipo de sonidos, acuden a Youtube o descargan archivos con varias horas de duración. Aunque a veces no es suficiente, necesitamos un sonido con una longitud indefinida o, como dije antes, que nuestro sistema consuma pocos recursos (a estas alturas descomprimir un mp3 no es muy pesado, y reproducir un vídeo tampoco, ¡¡pero no vamos a desaprovechar CPU a lo tonto!!).

Vamos a ver desde aquí diferentes tipos de ruido, a los que llamaremos por su color:

Ruido Blanco

O White Noise. Y con él empezó todo esto de los colores del ruido. El ruido es un sonido cuya amplitud varia con el tiempo de forma aleatoria, pero el ruido blanco intenta distribuir la potencia entre todas las frecuencias del espectro audible. Es decir, el ruido blanco tiene señal en todas las frecuencias del espectro y todas tendrán la misma potencia.
El ruido blanco puede sonar como una lluvia fuerte. Aquí tenemos un ejemplo:

Para generarlo, podemos hacerlo con muchísimos programas. Generar ruido blanco es algo muy sencillo algorítmicamente hablando, sólo tenemos que generar números aleatorios. Podemos utilizar por ejemplo:

  • aplay, cogiendo directamente de la fuente de números aleatorios del ordenador:
    aplay --channels=2 --format=S16_LE --rate=44100 --duration=3600 /dev/urandom
  • melt:
    melt noise

    O incluso podemos generar un fichero de vídeo junto con el ruido (si especificamos un formato sólo de audio se generará solamente el sonido):
    melt noise -consumer avformat:ruidoblanco.mp4 acodec=libmp3lame vcodec=libx264 ab=256K vb=5120K
  • gstreamer:
    gst-launch-1.0 audiotestsrc wave=white-noise volume=1 ! audioconvert ! queue ! autoaudiosink

    O podemos generar un archivo mp3 con el sonido:

    gst-launch-1.0 audiotestsrc wave=white-noise volume=1 num-buffers=150000 ! audioamplify amplification=2 ! queue ! audioconvert ! lamemp3enc bitrate=256  ! filesink location=whitenoise.mp3 max-bitrate=256
  • sox:
    play -n synth whitenoise

    O si queremos salvarlo en un archivo de 10 segundos de audio:
    sox -n -r 44100 whitenoise.mp3 synth 0:04 whitenoise vol 1
  • Y, por supuesto tenemos Audacity, GNURadio, Matlab/Octave y multitud de programas con y sin entorno gráfico. Existe el filtro anoisesrc para ffmpeg/avconv que por detrás usa el generador de gstreamer, por lo que muchas herramientas terminarán utilizando alguno de los programas o bibliotecas mencionados.

Ruido rosa

El ruido rosa se caracteriza en que su nivel sonoro tiene una densidad espectral inversamente proporcional a la frecuencia. Su energía decrece 3dB por octava. Como en cada octava el rango de frecuencias es el doble, la energía decrece a la mitad. Así, si miramos la energía de las componentes de frecuencia por octavas, veremos todas las octavas con la misma energía.

Se usa mucho para calibrar fuentes de audio o ver características acústicas arquitectónicas.
Podemos escuchar este ejemplo:

El ruido rosa se parece mucho al blanco, y puede sonar como cuando soplas a un micrófono con fuerza (de forma constante, con pulmones ilimitados) o como un viento fuerte.

Y por supuesto, al ser fácil de generar también, podemos utilizar algunas herramientas como estas:

  • gstreamer:
    gst-launch-1.0 audiotestsrc wave=pink-noise volume=1 ! audioconvert ! queue ! autoaudiosink

    O podemos generar un archivo mp3 con el sonido:

    gst-launch-1.0 audiotestsrc wave=pink-noise volume=1 num-buffers=150000 ! audioamplify amplification=2 ! queue ! audioconvert ! lamemp3enc bitrate=256  ! filesink location=pink.mp3 max-bitrate=256
  • sox:
    play -n synth pinknoise

    O si queremos salvarlo en un archivo de 10 segundos de audio:
    sox -n -r 44100 pinknoise.mp3 synth 0:04 pinknoise vol 1
  • Otros programas pueden ser speaker-test, el programa que utiliza alsa para probar los altavoces. Audacity también es capaz de generar ruido rosa. Y, por supuesto con octave se puede conseguir un ruido rosa de calidad.

Ruido azul

Tiene baja potencia en bajas frecuencias y su potencia va creciendo 3dB cada octava, por lo que crece de forma proporcional a la frecuencia. El sonido que se percibe es como el de una catarata, aunque hay personas que perciben el mismo sonido que una máquina de cortar césped. Aquí vemos un ejemplo:

Para generarlo, podemos utilizar gstreamer de la siguiente manera:
gstreamer:

gst-launch-1.0 audiotestsrc wave=blue-noise volume=1 ! audioconvert ! queue ! autoaudiosink

O podemos generar un archivo mp3 con el sonido:

gst-launch-1.0 audiotestsrc wave=blue-noise volume=1 num-buffers=150000 ! audioamplify amplification=2 ! queue ! audioconvert ! lamemp3enc bitrate=256  ! filesink location=bluenoise.mp3 max-bitrate=256

Ruido violeta o púrpura

Su potencia se incrementa 6dB por octava. Tiene baja potencia para frecuencias graves y más alta en los agudos. Yo lo uso principalmente para aliviar mi acúfeno y me va mejor que cualquier otro tipo de ruido. Sigue la misma lógica que el azul, pero tiene una pendiente más pronunciada en su gráfica.
Podemos utilizar como ejemplo este:

Y, por supuesto, para generarlo podemos utilizar gstreamer:

gst-launch-1.0 audiotestsrc wave=violet-noise volume=1 ! audioconvert ! queue ! autoaudiosink

O podemos generar un archivo mp3 con el sonido:

gst-launch-1.0 audiotestsrc wave=violet-noise volume=1 num-buffers=150000 ! audioamplify amplification=2 ! queue ! audioconvert ! lamemp3enc bitrate=256  ! filesink location=violetnoise.mp3 max-bitrate=256

Ruido gris

Vemos que los diferentes colores de ruido se van generando aplicando una función matemática a la señal obteniendo diferentes gráficas de densidad espectral. El ruido gris es un caso especial en el que se aplican las características psicoacústicas humanas a dicho ruido. Eso quiere decir que los humanos no escuchamos con la misma intensidad todas las frecuencias del espectro. Las que son muy agudas o muy graves, aunque las escuchamos, pero no lo hacemos con la misma intensidad que las frecuencias medias. Es más, dependiendo del individuo, algunas personas escucharán mejor unas frecuencias que otras. Así que para generar el ruido gris, debemos aplicar una corrección para que la sensación, en teoría, sea que escuchamos todas las frecuencias a la misma intensidad. Para generar este tipo de ruido, podríamos generar un ruido blanco y ecualizar la señal (por ejemplo, con Audacity).

El ruido gris puede compararse con el viento moviendo las hojas de un árbol.

Ruido marrón (o browniano)

Si atendemos al color que se vería si lo llevamos al terreno de la imagen, debería llamarse ruido rojo. Pero como lo descubrió Robert Brown y también es un color, se suele llamar ruido marrón / brown o brownian noise. Además, el color rojo se parece en cierto modo al marrón, y como hay más componentes en el espectro no sería un rojo puro… bueno, lo podemos mirar desde diferentes perspectivas. En éste, al contrario que el ruido violeta, su energía decrece 6dB por octava, por lo que las bajas frecuencias tomarán especial importancia.

Puede ser comparado con el agua del mar. De hecho, se pueden aplicar ciertos efectos que simulan el vaivén de las olas del mar. También hay quienes lo comparan con el ruido de la multitud.

Podemos ver un ejemplo aquí:

También podemos generarlo utilizando gstreamer o sox (en Audacity, por ejemplo también se puede)

  • gstreamer:
    gst-launch-1.0 audiotestsrc wave=red-noise volume=1 ! audioconvert ! queue ! autoaudiosink

    O podemos generar un archivo mp3 con el sonido:

    gst-launch-1.0 audiotestsrc wave=red-noise volume=1 num-buffers=150000 ! audioamplify amplification=2 ! queue ! audioconvert ! lamemp3enc bitrate=256  ! filesink location=brownnoise.mp3 max-bitrate=256
  • sox:
    play -n synth brownnoise

    O si queremos salvarlo en un archivo de 10 segundos de audio:
    sox -n -r 44100 brownnoise.mp3 synth 0:04 brownnoise vol 1

Como extra, indicaré un script muy curioso que ví, y que combina ruido marrón con ruido rosa y aplica una función seno para que sí que parezcan las olas del mar:

play -n synth brownnoise synth pinknoise mix synth sine amod 0.15 10

Más colores del espectro

Podemos pensar a partir de aquí en otros colores como el negro, que puede ser el silencio o que sólo tiene energía en determinadas frecuencias, o también puede ser el que ocurre en ultrasonidos (¿ultravioleta?). En fin, hay mucha literatura sobre esto y poco convenio. El ruido verde suele tener más energía en frecuencias medias, aunque hay autores que lo centran en las frecuencias propias de la voz humana (200Hz-3KHz o tal vez un poco más). Otros centran la máxima energía del ruido verde en torno a 500Hz. Para gustos los colores.
Aunque a partir de aquí, podemos teñir el ruido gracias a un ecualizador. También podemos experimentar con esta página web: MyNoise White Noise Generator.

Foto del prisma: D-Kuru

También podría interesarte...

There are 7 comments left Ir a comentario

  1. Pingback: Cómo generar ruido de diferentes colores en GNU/Linux | PlanetaLibre /

  2. Israel Perales /
    Usando Mozilla Firefox Mozilla Firefox 58.0 en Linux Linux

    No sabia que con gstreamer se podia, pero con javascript si se puede y como no sabia lo primero me hice una extensión de firefox, yo utilizo el ruido blanco para concentrarme en el trabajo ya que me distraen mucho, también agregue ruido rosa y cafe , me falta el azul y el violeta.

    https://addons.mozilla.org/en-US/firefox/addon/whitenoisefy/

    El código lo hice ayudandome de esta pagina, basicamente es el core

    https://noisehack.com/generate-noise-web-audio-api/

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 57.0 en Linux Linux

      Hola Israel !! Gracias por tu aportación. La verdad es que con Javascript, actualmente se pueden hacer muchísimas cosas. Y los motores cada vez están mejor optimizados, por lo que es una buena opción para hacer programas multiplataforma. Espero que a alguien más le resulten útiles tus enlaces. He estado mirando los enlaces y son muy interesantes.

  3. davidochobits /
    Usando Google Chrome Google Chrome 63.0.3239.132 en Windows Windows 7

    Muy interesante Gaspar. Leyendo el artículo he recordado un capítulo de la nueva edición de Cosmos, presentado por Neil deGrasse Tyson, en el que hablan del espectro y la longitud de onda. Me ha venido a la cabeza cuando he visto la imagen del prisma. Son cosas que vemos todos los días en la naturaleza y no nos fijamos con detenimiento.

    Saludos y enhorabuena por el artículo.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 57.0 en Linux Linux

      Gracias David! La serie nueva de Cosmos está muy bien (aún me falta algún capítulo por ver, he de confesar). A mi este tema de la luz y el sonido me encanta, ya daré guerra, ya daré guerra 🙂

  4. juangmuriel /
    Usando Mozilla Firefox Mozilla Firefox 57.0 en Ubuntu Linux Ubuntu Linux

    Desde los 19 años (tengo 46) uso ruido blanco para dormir, lo genero con una radio de mano desintonizada que pongo sobre mi oreja. Es cerrar los ojos e imaginar que llueve y te sacude un mazazo directo al sueño profundo.
    No genera adicción ni fisica ni sicologica.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 57.0 en Linux Linux

      Lo siento, son muchos años sin silencio. Yo llevo muchos menos y tengo menos manejo, me cuesta un poco dormir. El ruido blanco sí que le funciona a muchas personas.

Leave a Reply