.

Gracias a esta reseña en CSS-Tricks llego a un artículo en CodePen de Greg Hovanesyan titulado «Recreating legendary 8-bit games music with Web Audio API».

La música 8-bit o chiptunes es música electrónica sintetizada con ordenadores, consolas o máquinas recreativas antiguas. Es parte de una cultura para personas que crecieon a finales de los años 70 y en los años 80, y todavía es muy popular entre los geeks. El sonido era producido por el PSG (Programmable Sound Generator), un chip de sonido que sintetizaba varias formas de onda y a menudo ruidos. El generador podía producir […] formas de onda simples: pulso, cuadrada, triangular y sierra. También tenía un generador de ruido pseudo-aleatorio (PRNG). Hay un vídeo muy interesante del 8-Bit Guy, How Oldschool Sound/Music worked, donde habla de cómo el sonido se generaba en los distintos sistemas, y cómo distintas aproximaciones y trucos permitían a los desarrolladores de juegos crear música legendaria con hardware muy limitado. Recomiendo encarecidamente ver el vídeo, si se quiere entender como se crea la música 8-bit. Fue muy interesante para mí, así que decidí investigar algo más e intentar emular la música de juegos de 8-bit legendarios utilizando el Web Audio API.

El texto completo está lleno de ideas y recursos sencillos pero efectivos que consiguen un resultado, cuando menos, interesante. Se puede ver también en CodePen, por si alguien quiere curiosear en el código resultante, algo que yo mismo cuando tenga un rato.

Demostración del proyecto de Greg Hovanesyan para recrear música de vídeojuegos clásicos en el navegador.

.

Llego vía Echo JS a un artículo de Tero Parviainen titulado «JavaScript Systems Music: Learning Web Audio by Recreating The Works of Steve Reich and Brian Eno»:

In this guide we’ll explore some of the history of systems music and the possibilities of making musical systems with Web Audio and JavaScript. We’ll pay homage to three seminal systems pieces by examining and attempting to recreate them: “It’s Gonna Rain” by Steve Reich, “Discreet Music” by Brian Eno, and “Ambient 1: Music for Airports“, also by Brian Eno.

Diagrama completo de Discreet Music.

He hecho algún experimento con Web Audio pero proyectos y explicaciones como esta animan a probar más cosas. Y, aunque nunca he abordado directamente la música de sistemas, sí que he tenido contacto tangencial con este tema. Hace algo más de un año ya señalaba la obra de Steve Reich en la entrada sobre las visualizaciones de Alexander Chen y, antes de eso, mencionaba programas como Max (a su vez mencionado en una cita del artículo de Parviainen) en la reseña sobre música imposible.

.

Hoy se decide la última nota en la melodía de CrowdSound.net, un experimento de composición en masa:

Se está generando una melodía nota a nota, en tiempo real, utilizando el voto popular. […] Esta melodía se convertirá en una canción con una estructura de acordes Do, Sol, La menor, Fa repetida 18 veces. Tendrá una estructura de (Verso / Verso / Coro / Verso / Coro / Conclusión). La canción está a día de hoy en forma de esqueleto.

El resultado del proyecto es curioso, igual que las estadísticas que sacan del proceso, aunque me interesó más ver cómo generaban la partitura con canvas y los sonidos con howler.js. Se puede reproducir la melodía eligiendo con el sonido de qué instrumento se quiere oír, saltar directamente a una parte de la canción y modificar el ritmo de la reproducción.

También resulta curioso, aunque no creo que sea casual, que la progresión armónica utilizada sea la popular I–V–vi–IV. Es casi imposible no oírla a menudo, como señalaron Axis of Awesome, y afianza más mi teoría no verificada ni estudiada (ni siquiera tiene mucho sentido) que su uso debe ser un método para reducir la complejidad de las canciones.

.

Veía hace unos días una reseña en Hacker News sobre un sintetizador multi-toque hecho con Typescript/React aunque su creador, Luke Phillips, no da detalles de la implementación:

No es la primera vez que menciono sintetizadores hechos con JavaScript, siendo el más conocido probablemente el que hizo Google como homenaje al Dr. Moog.

.

El mes pasado me topé con “Beat Detection Algorithms”, un texto en dos partes (1 y 2) sobre la implementación en Scala de un par de algoritmos sencillos con el objetivo titular. Aparte de la explicación de la teoría tras estas implementaciones se puede encontrar el resultado integrado en el código fuente de un proyecto del autor.

Recuerdo haber echado un ojo a este tipo de análisis matemático (aunque sin llegar a aplicarlo) a finales de la década de los 90, en la estela de la demoscene y con el ascenso de WinAmp y sus complementos de visualización. Remontándome sólo al año pasado, tenía apuntado un artículo sobre detección de pulsaciones usando Web Audio, encontrado a través de EchoJS, nuevamente sin llevarlo a la práctica por mi parte.

Grimes – Go: Peaks with a lowpass, highpass, and bandpass filter, respectively.

Este último enlace lo tenía apuntado junto con otra reseña en EchoJS de un proyecto denominado WaveGL, cuyo objetivo era “generar audio en la GPU y transmitirlo a la tarjeta de audio” y del que señalaban uno de varios ejemplos. Con tantos proyectos de programación que he visto recientemente no estaría mal sacar un poco de tiempo para programar por gusto en lugar de por compromiso.