domingo, 10 de diciembre de 2017

Visualizaciones ad hoc de sonido con R

En este corto artículo quería aprovechar un contacto inicial con el intrincado mundo del procesamiento de señales de audio con R, para hacer un par de visualizaciones ad hoc más personalizadas que lo que ofrecen los paquetes estándar.

Digo que es un mundo intrincado por la disparidad de paquetes preparados para tratar sonido, ninguno de los cuales me ha parecido lo bastante cómodo y completo como para obviar los demás: tuneR, seewave, sound, phonTools,... así que he acabado usando varios de ellos.

Como forma de onda de prueba he escogido el canto de un pájaro (Zonotrichia capensis), incluído como 'tico' en el paquete seewave. El muestreo está hecho a 22KHz y 16 bits.


Si dibujamos el oscilograma completo de la forma habitual, con este nivel de zoom tenemos una sucesión de manchas.



Vamos a mejorar la representación de la forma de onda incluyendo información enriquecida con un gradiente de intensidades. El color o densidad muestra la distribución de amplitudes, tanto positivas como negativas, que se producen en el intervalo temporal que genera cada línea.



Con el gráfico tradicional los máximos de cada tramo enmascaran el reparto de amplitudes, permitiendo ver solo la envolvente del sonido. Esta nueva imagen no sólo es visualmente más atractiva sino que aporta información extra.

A continuación con la función spectrogram() de phonTools vemos como varía el contenido en frecuencia del sonido con el tiempo. Se dibuja la evolución enventanada de la FFT con el mapa de colores 'Jet'.



Es notable la pureza espectral del canto del ave, con un único armónico de relevancia como es habitual en los sonidos de tipo silbo. El pajarillo hizo tres modulaciones en frecuencia descendente y una final semi ascendente.

Sofisticamos el espectrograma con una representación en falso 3D (waterfall) de aire analógico/retro, situando el eje temporal en vertical. La información numérica sigue presente pero se expresa de forma más minimalista que con las gráficas de ejes clásicos.



El coloreado de las propuestas mejoradas se ha hecho con curvas en Photoshop, mientras el código con el que se han generado tanto las gráficas habituales como las versiones ad hoc está en soundvisualization.R. No he vectorizado el código porque los bucles anidados ya se ejecutan muy rápido.

El estilo del nuevo espectrograma posiblemente resulte familiar porque aparecía en la portada del disco 'Unknown pleasures' de Joy Division, que mostraba pulsos sucesivos del primer púlsar descubierto pocos años antes.



El tratamiento puede en realidad aplicarse a cualquier imagen, llegando a obtener resultados curiosos si se usa sobre fotografías. En alta resolución aquí.



Tengo pensado dedicar un artículo más profundo al tema del audio con R, en particular hacer algunos ejercicios de síntesis FM, aplicar envolventes ADSR y tratamiento del sonido como una serie temporal. Stay tuned...

No hay comentarios:

Publicar un comentario

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.