20 mar 2020

LiveCoding: aka cómo generar tu propia sinestesia

Cuando hablamos del término sinestesia, se define como una experiencia sensorial, a partir de estímulos generados por otros sentidos. Hace un par de semanas, el elenco de Zerolynx estuvo en la RootedCon donde estuvimos disfrutando de interesante ponencias, y una de las charlas que más me llamó la atención, como músico autodidacta, fue la que nos esbozó el concepto de LiveCoding. La idea es simple, consiste en generar música en tiempo real a través de código.

Tras ver las posibilidades artísticas, llevaba días dándole vueltas y por fin he conseguido sacar un ratito para hacer algo divertido. Viendo las características de LiveCoding, cualquiera podría pensar que consiste en programar sintetizadores, efectos e instrumentos digitales, pero tras ver un poco como funciona, la idea era buscar funcionalidades inalcanzables para cualquier programa de edición de audio al uso.

No pude evitar preguntarme: ¿Qué puede llegarse a hacer con esto realmente? ¿Qué elementos es viable usar como entrada al programa? ¿Es posible convertir cualquier variación de voltaje o frecuencia en música?

La respuesta es el OSC (Open Sound Control). Es un protocolo creado para la comunicación entre ordenadores, sintetizadores y otros dispositivos de audio a través de la red. El protocolo funciona mediante UDP, y puede usarse como entrada en Sonic Pi, el software de LiveCoding que he utilizado para esta primera PoC.

Python, tiene librerías para OSC disponibles que pueden conectarse a Sonic Pi mediante el servidor que la propia aplicación levanta por defecto en el puerto 4560. Esto quiere decir que es posible controlar la música que se genera en la aplicación de forma externa. Sabiendo esto, en mi cabeza comienzan a sonar Arduino, sensores, API's... podemos usar cualquier tipo de entrada para generar o parametrizar instrumentos de software.

Partiendo de esta idea, he creado un pequeño código que genera la serie de fibonacci y la transforma en notas pertenecientes a la escala de Do Mayor (C Major), creando así una sucesión de notas armónicas que provienen de esta serie. Para Sonic Pi, el Do3 (Que corresponde al Do central en un piano, C4 en notación anglosajona) se representa con el número 60. En principio, podríamos empezar desde esa nota, e ir sumando los resultados de la serie, pero rápidamente pasaríamos a frecuencias de ultrasonidos, pues la sucesión crece muy rápido. Para evitar esto, he jugado con el resto de dividir entre 12 los resultados de la serie. Os explico el porqué en la siguiente imagen.


Podéis ver como a lo largo del piano se repiten las notas en diferentes octavas, que no son más que múltiplos o divisores de la misma frecuencia. Por ejemplo A4 (La3), corresponde a 440Hz, de ahí podemos deducir que A3 es el sonido que se produce a 220Hz, y A5, a 880Hz. Para más información sobre frecuencias de afinación, podéis ver todas las habituales aquí.

Para que nuestra generación musical funcione, manteniéndose dentro de la misma octava, es necesario convertir los valores resultantes de fibonacci a Z12, que se corresponde con el número de semitonos que hay en una octava. Así que podemos decir que, el programa genera una melodía armónica a partir de los valores de la serie, restringida a las frecuencias comprendidas entre C4 y C5 del piano.


Si observamos el código anterior, no es más que el algoritmo de fibonacci, añadiendo algunos parámetros de configuración para mandarle los valores al sintetizador :dsaw de Sonic Pi. He añadido un efecto de reverberación y un silencio de 0.5 beats.

A continuación, podemos ver el audio generado por la aplicación:


Seguiremos aprendiendo de Sonic Pi, para traeros más artículos relacionados con el mundo musical.

¡Saludos!

No hay comentarios:

Publicar un comentario