La necesidad de crecer lejos de estas raíces
(vitling.xyz)- El código funciona como una partitura de arte instalativo que dirige al mismo tiempo la selección de acordes, la síntesis de sonido y la reacción de los LED, haciendo que una estructura con forma de tallo vegetal genere repetidamente sonido y luz
- La parte A crea acordes Major, Minor, Major 7th, Minor 7th e inversiones desde A2 hasta D5, y cada 8 segundos se desplaza a un acorde que difiere en una sola nota
- La parte B elige una nota del acorde actual y la reproduce con forma de onda y duración aleatorias, superponiendo notas sueltas impredecibles sobre una progresión armónica regular
- Cada vez que se genera un nuevo acorde o una nota, los LED con forma de tallo reaccionan, y el color de cada nota se mapea para que las notas cercanas en el círculo de quintas se vean similares
- La implementación se divide entre un programa de audio en C++ para Raspberry Pi 3 B+ y el control LED con FastLED en Arduino Uno, y ambos dispositivos intercambian información de notas por puerto serial
Partitura compuesta por reglas generativas
- La parte A enumera todos los acordes posibles Major, Minor, Major 7th, Minor 7th y todas sus inversiones desde A2 hasta D5
- El acorde seleccionado se reproduce durante 8 segundos y luego se mueve a uno de los acordes que difieren del actual en una sola nota
- Este proceso continúa repitiendo la reproducción de 8 segundos y la selección de acordes adyacentes
Reglas de generación de sonido
- La parte B selecciona una nota del acorde que se está reproduciendo en ese momento
- La nota seleccionada se reproduce con una forma de onda aleatoria durante una duración aleatoria
- Si la duración es corta, se repite una cantidad aleatoria de veces, y después de esperar un tiempo aleatorio, el mismo proceso vuelve a repetirse
Reglas de respuesta de iluminación
- La parte C ilumina cada tallo desde la raíz hasta la punta cada vez que se activa un nuevo acorde en la parte A
- Los colores de la iluminación corresponden a cada nota del acorde, y las notas adyacentes en el círculo de quintas tienen tonos similares
- La parte D ilumina la punta de uno de los tallos con un color brillante correspondiente a esa nota cada vez que se reproduce una nota en la parte B
Implementación de hardware y software
- Las partes A y B están a cargo de un programa personalizado en C++ que corre en Raspberry Pi 3 B+
- Maneja tanto la selección de notas como la síntesis del búfer de audio
- Las partes C y D están implementadas con un programa personalizado en una placa Arduino Uno
- Usa FastLED para interactuar con una tira de LED con protocolo WS2812B
- La información de notas que se envía de Raspberry Pi a Arduino llega mediante señales de puerto serial
Estructura física y modo de funcionamiento
- La tira de LED pasa por el interior de tubos transparentes usados en acuarios domésticos
- Los tubos están reforzados con alambre de níquel grueso para darles una forma moldeable
- La carcasa de madera bajo la maceta contiene el microcomputador, el cableado y un conector de audio de 3.5 mm para conectar el sistema de sonido
- La alimentación entra a través de dos conexiones principales de energía
- Las computadoras funcionan en modo headless y se inician automáticamente cuando reciben energía
1 comentarios
Comentarios de Hacker News
Esta persona también es la creadora de un genial endless acid banger con el que puedes jugar durante horas en el navegador
https://www.vitling.xyz/toys/acid-banger/
Después de probar esto, terminé comprando incluso un clon de 303 para empezar a trastear con él. También me gusta que todas las demos se abran con una pantalla silenciosa de “click to start”, y que los videos con reproducción automática, como en este artículo, vengan en silencio por defecto
En este artículo, los controles de volumen solo aparecieron cuando pasé el mouse sobre el “silent gif”, y en acid banger ya iba por la mitad de un comentario antes de descubrir que el silencio se quitaba haciendo clic en cualquier parte
Es interesante ver la partitura de música generativa escrita en una forma de especificación como esa
Es lo bastante detallada como para que, si alguien reimplementara su propia versión basándose en esas instrucciones, esencialmente saliera la misma “obra musical”, pero la interpretación sin duda sería diferente. Una partitura fija con precisión algunas cosas, pero deja otras decisiones abiertas. Quedan preguntas como qué significa exactamente “todas las inversiones” al enumerar acordes, si eso incluye voicings abiertos, entre qué valores elegir la duración de una forma de onda aleatoria, qué tan “corto” debe ser algo al decidir repeticiones, qué sintetizador de formas de onda usar y cómo modularlo
Estas decisiones se parecen a las que toma un intérprete de instrumento tradicional al leer y ejecutar una partitura. Aquí, quien programa música generativa puede seguir esta “partitura” y crear un programa con su propia interpretación
Fue un ejercicio divertido implementarlo en Sonic Pi(https://sonic-pi.net/), y siento que logré algo cercano a la dirección que pretendía el compositor. Tiene una atmósfera parecida a la grabación del video, pero, si tiene sentido decirlo así, vendría siendo mi propia “interpretación” de esa obra. Aunque quien realmente toca al ejecutarse es Sonic Pi
Esto también me hizo volver a pensar en la relación entre especificación e implementación. Las distintas implementaciones que hacen diferentes programadores de un algoritmo pueden verse como “interpretaciones” individuales de la partitura que sería el diseño general, y quienes desarrollan componentes de una arquitectura de sistema más grande también pueden parecer músicos que tocan su parte dentro de una banda u orquesta. Algunos equipos son dirigidos por una especie de director-arquitecto; otros funcionan como gente intercambiando riffs e improvisando, tomando un solo de vez en cuando. Y otros parecen músicos de sesión que siguen la especificación del productor y tocan de forma sólida, aunque sin mucho lucimiento
Fue un ejercicio de programación meditativo, ideal para una tarde de domingo, y me cambió la perspectiva
Hace tiempo, cuando intenté exhibir un trabajo anterior, recibí comentarios de una curadora de arte sobre esta pieza: https://www.vitling.xyz/welcome-to-tech-talk/ . Al principio no entendía muy bien lo que estaba pasando, pero después de que le expliqué cómo funcionaba y qué ocurría por dentro, dijo: “Ahora sí me gusta mucho. Pero estás ocultando al público toda la parte interesante”
En el arte generativo, el “trabajo” que hago se parece más a un conjunto de reglas o a un algoritmo que al audio o a lo visual que sale como resultado. Por eso siempre quise encontrar una manera de mostrar lo que ocurre “dentro de la caja”. El código fuente puede servir, pero solo para quien sabe leerlo, y además la idea central suele quedar sepultada entre boilerplate y rarezas técnicas. Así fue como llegué a la idea de escribirlo en forma de partitura: quería mostrar la premisa básica de lo que estaba ocurriendo, pero solo hasta el punto de no perderse en los detalles
https://massmoca.org/event/walldrawing305/
Así que probablemente quedarían fuera muchos voicings más abiertos y espaciados
Las inversiones cambian bastante el carácter del acorde
Me gustaría que me recomendaran libros o cursos de teoría musical que ayuden a entender este algoritmo o https://www.vitling.xyz/toys/acid-banger/
Hay reglas bastante simples que predicen que algo sonará bien, y otras más complejas; además, es bien sabido que la música barroca es algorítmica, pero todavía no logro hacerme una idea clara
Antes busqué en esta dirección, pero no recuerdo exactamente qué problema tenían los libros que vi. Supongo que la mayoría eran demasiado básicos y no me ayudaron. Hace mucho recibí entrenamiento muy básico de solfeo y puedo leer partituras, pero en ese entonces era demasiado joven para hacer las preguntas que tengo ahora o entender el propósito de esa formación
Al final, es difícil entender la teoría musical si no escribes mucha música tú mismo. Se parece a leer un libro de JavaScript: si nunca has programado software y tampoco piensas hacerlo, no hay manera de entender realmente ese libro
Si tratara de explicar cómo podría funcionar esta aplicación, sería algo así como elegir al azar un subconjunto de notas, es decir, grados de la escala, dentro de una tonalidad menor. La escala pentatónica, que es un subconjunto de cinco notas o menos dentro de una escala, limita el espacio melódico posible para que la mayoría de las combinaciones suenen bien. Cuantas menos notas uses, más predecible y agradable sonará, aunque también puede volverse menos interesante. Por ejemplo, las notas que forman el acorde tónico siempre suenan bien sin importar en qué orden se toquen. Las líneas acid normalmente insinúan algún acorde menor mediante un arpegio, una melodía repetitiva compuesta solo por notas de cierto acorde
Además, un subconjunto de una escala siempre puede estar contenido también en otra escala. Puedes modular de una escala a otra creando una sección que use un subconjunto de notas compartidas y luego cambiando a la nueva escala. De esta forma, una canción puede pasar por todas las escalas posibles, y en el acid techno casi todas serán escalas menores
No puedes tomar algo escrito para personas con un nivel de comprensión superior al tuyo y sacar mucho de ahí. Tienes que leer página por página con lentitud, intención y humildad, dedicando tiempo a entender por completo cada término con el que te cruces. En ese proceso te desvías durante horas, y de ahí salen más y más términos como ramas que no terminan nunca. No puedes saltarte palabras como intervalo, locrian o lydian y esperar entenderlas por ósmosis
Habla de qué es la altura tonal, por qué al cerebro le “gustan” ciertas combinaciones de alturas y otras no, etc. También es un libro interesante por sus distintas teorías sobre neurología musical, y al principio incluye una introducción muy básica a la teoría
Como consejo para el autor, podrías simplificar mucho la complejidad de hardware y software quitando el Arduino y usando esta librería para controlar directamente tiras WS281x desde la Raspberry Pi: https://github.com/jgarff/rpi_ws281x
Yo la uso en una Pi 4 para controlar una tira WS2815 de 466 píxeles instalada en el alero de mi casa como decoración de temporada
Hay una teoría musical interesante escondida en este proyecto. Con el algoritmo descrito, todas las transiciones posibles de un acorde a otro son o bien transiciones al mismo acorde —por ejemplo, de Do mayor a una inversión suya, o agregando o quitando la séptima—, o una de las tres transformaciones básicas de la teoría neo-riemanniana: P, L y R
Para más detalles, véase la página de Wikipedia sobre Neo-Riemannian theory, pero la idea esencial de P, L y R es esta. Si un acorde arbitrario x es mayor, entonces P(x), L(x) y R(x) serán todos menores. Si x es menor, entonces P(x), L(x) y R(x) serán todos mayores. P, L y R son cada una su propia inversa, así que P(P(x)) = x, y lo mismo ocurre con L y R. Mediante alguna secuencia de transformaciones P, L y R se puede ir desde cualquier acorde mayor o menor a cualquier otro acorde mayor o menor. Por ejemplo, si a Do mayor le aplicas primero L y luego R, obtienes Sol mayor; si aplicas primero R y luego P, obtienes La mayor; y si aplicas primero L y luego P, obtienes Mi mayor
Moverse mediante transformaciones neo-riemannianas es una forma de llegar rápidamente a centros tonales “lejanos”, es decir, con pocas notas de escala en común con la tonalidad de partida, mediante conducción suave de voces. Aun así, me sorprendió que al oír esta pieza la armonía se sintiera relativamente estable. Lo interesante es que, por cómo está construido el algoritmo, la transformación P aparece mucho menos que las transformaciones L o R, o que quedarse en el mismo acorde. La transformación P es un ingrediente clave para desplazarse rápido hacia tonalidades lejanas, pero según mi cálculo aproximado, suponiendo que el proceso de Markov haya alcanzado su estado estacionario e ignorando las restricciones de altura mínima y máxima, solo 1/27 de todos los cambios de acorde son transformaciones P. También se obtiene que, en estado estacionario, los acordes de séptima son más comunes que las tríadas simples en una proporción de 16:11
Me interesan los detalles técnicos porque quiero entender mejor las limitaciones de la Raspberry Pi
¿No se podría haber hecho todo esto con una sola Raspberry Pi y muchos pines GPIO conectados a ella? Ahora mismo da la impresión de que la Raspberry Pi está menos aprovechada, y parece mejor simplificarlo a una sola placa. Además, eso tendría la buena consecuencia de necesitar una sola conexión de alimentación
Si lo que hace la Pi es solo “seleccionar notas y sintetizar el propio buffer de audio”, ¿acaso no podría hacerlo también un Arduino Uno?
Está bueno que esté escrito en pseudocódigo para que cualquiera lo pueda entender.
Yo también he hecho proyectos así, especialmente la parte de generación musical, así que me encanta esta forma de presentarlo. Incluso estaría mejor con un demo en video, y muchos proyectos de código mueren antes de empezar porque el autor solo los explica con un muro de texto largo.
Está realmente genial. Ojalá hubiera instrucciones detalladas de construcción para hacer algo así.
Podría servir como intro para un set de Four Tet :)
Qué belleza. Me hace imaginar un planeta alienígena donde las plantas son así.
Estas cosas podrían formar un bosque y hasta sincronizarse entre sí, como un metrónomo o luciérnagas.