.

El año pasado hice algunas representaciones minimalistas de escalas sobre un diapasón de guitarra, primero aisladas, como una de blues en La mayor y menor, y luego superpuestas en una especie de mapa de calor. Programé un objeto en JavaScript que, como buen ejercicio de sobre-ingenierización, permite representar en HTML y/o SVG un cordófono definido por un número de cuerdas arbitrario (al igual que la entonación y el número de trastes de cada cuerda) y marcar sobre dicho objeto notas, intervalos o escales de forma idempotente o aditiva.

No llegué a publicar el código, que además está comentado con JSDoc, porque sólo se trataba de un divertimento personal. En algún momento me plantee si me serviría como impulso para replantear el mezclador de escalas que programé hace más de una década.

Evidentemente, no es una idea especialmente original y por eso no me sorprendió encontrarme en Hacker News con Scaler, una herramienta para crear esquemas de escalas en una guitarra.

Esquema de un blues en La, según Scaler.

Estoy de acuerdo con algunos de los comentarios sobre el exceso de información visual inicial pero estoy seguro que se le puede sacar partido.

.

Publicaban ayer por la tarde un artículo en IEEE Spectrum sobre los usos musicales de las primeras computadoras. En él se postula que el primer texto donde se indica cómo generar sonido con una máquina computadora se encuentra en la página 24 del Programmers’ Handbook de Turing que se puede ver dentro de los documentos sobre las máquinas de Manchester. Según el artículo, Turing preparó dicho manual con antelación al despliegue en 1951 de la Manchester Mark II basándose en su trabajo de diseño de programación de la Manchester Mark I, desarrollada entre 1947 y 1948.

El manual toca brevemente sobre la capacidad de la máquina de Manchester de generar un tono gracias a una instrucción que enviaba un impulso al diafragma del altavoz, al que denomina «Hooter». El impulso producía, según el manual, sonidos que se podían percibir como «algo entre un toque, un chasquido y un golpe». Sugería que el programador podía aprovecharse de esto ya que, «introduciendo instrucciones de hoot en puntos adecuados[,] uno puede “escuchar” el progreso de la rutina. Un cierto indicio de lo que está ocurriendo es dado por el ritmo de los chasquidos que se oyen».

Turing también indica en su texto que enviando impulsos «de forma repetida y rítmica[,] una nota, rica en armónicos, se puede producir» y, de nuevo, confiere a esta capacidad una función puramente pragmática: para indicar al operario el estado de la ejecución de un programa. Esto se podía hacer repitiendo un ciclo de instrucciones que tuvieran una de hoot. El bucle más sencillo tenía una instrucción de hoot y otra de repetición. Como se esboza en el manual y describen en el artículo:

El tiempo que una computadora usa en ejecutar una instrucción se mide […] en ciclos de reloj: para mantener la sincronía de sus circuitos, una computadora tiene un reloj maestro, y sólo a cada paso de este reloj los resultados de un conjunto de circuitos son aceptados por el siguiente.

[N. del T.: El artículo señala que la Manchester Mark II tenía un reloj de algo más de 4 KHz, es decir, cuatro mil ciclos por segundo. En el apartado del manual dedicado al Hooter se indica que ocho ciclos equivalen a 1.92 ms con lo que la frecuencia del reloj sería de 4.16 Hz.]

La instrucción de hoot necesitaba cuatro ciclos, enviando un pulso de un ciclo de duración al altavoz en el cuarto ciclo. La instrucción de bucle o repetición también requería cuatro ciclos así que, al hacer un bucle, el pulso se enviaba una vez cada ocho ciclos, o a una frecuencia de unos 521 hercios, que es muy cercana a la de la nota Do5. [N. del T.: el manual de Turing dice que el tono es cercano a un Do central (Do4) pero en afinación La 440 la frecuencia más cercana es la del Do5, de 523,25Hz.] Turing se dio cuenta que utilizando múltiples instrucciones de hoot dentro del bucle y/o instrucciones «de pega» [denominadas «dummy» en inglés] en las que la computadora «desperdiciase» ciclos ejecutándolas, podía variar el tiempo entre pulsos, creando notas con distintas frecuencias. Por ejemplo, dos hoot consecutivos seguidos de la instrucción de bucle producirían un Fa4.

Esta función de la máquina sería la que Christopher Strachey para añadir por cuenta propia «God Save the King» al programa que Turing le encargó —quizás como novatada— para que la máquina comprobase su propio estado. Strachey había visitado por primera vez los laboratorios de Manchester en julio de 1951 y la tarea le llevó unos meses.

Sin embargo, esta no fue la primera instancia de música generada por máquina computadora. En la Australian Conference on Automatic Computing Machines de agosto de 1951 en Sydney, la máquina CSIRAC ya estaba generando melodías. Y existe un caso todavía anterior.

En agosto de 1949 la Eckert-Mauchly Computer Corporation completó BINAC. El equipo lo celebró con una fiesta que tuvo una aportación musical de la propia máquina. El artículo de IEEE Spectrum identifica a Frances Elizabeth “Betty” Snyder Holberton, una de las seis programadoras originales de la ENIAC, como la autora de la rutina musical, que desarrolló trabajando por la noche. Rememorando sus tiempos de programación para la BINAC contó que «estaba con la máquina 16 horas [con] 8 horas de descanso y dormía en el aseo de señoras». La programadora recordó también que, en la fiesta inaugural, su programa reprodujo la congratulatoria «Es un muchacho excelente» dado que sólo podía generar notas dentro de una octava. Curiosamente, en el vídeo que acompaña al artículo señala la conveniencia de añadir un altavoz a la máquina para poder saber lo que se estaba ejecutando por el sonido, tal y como sugirió Turing en su manual.

Betty Holberton programando la ENIAC, según lo descrito en la Wikipedia.

.

Llego vía Echo JS a Melody of Life, un sintetizador de música a partir del Juego de la vida de Conway. Como dice el autor en GitHub:

Melody of Life es una variación del Juego de la vida de Conway, que es un autómata celular y juego de cero jugadores. En Melody of Life cada célula en la parrilla finita de 20×20 se corresponde a una nota de la escala pentatónica, [de modo que] patrones celulares interesantes crean patrones tonales interesantes.

Un paso generado al azar en Melody of Life.

.

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.

.

La semana pasada me pasaron el enlace a Quick, Draw!, una especie de Pictionary donde tu pareja que intenta adivinar lo que estás dibujando es una red neuronal. Como juego es gracioso pero lo que me gustó aún más fue descubrir que forma parte de un grupo de experimentos de inteligencia artificial de Google. De ellos, dos tienen un corte claramente musical.

El primero es The Infinite Drum Machine, una caja de ritmos básica que permite utilizar en tu navegador miles de sonidos cotidianos. La gracia de este experimento reside en que la catalogación y agrupación de sonidos la ha hecho una máquina utilizando un algoritmo de aprendizaje automático t-SNE sobre el audio exclusivamente, sin utilizar etiquetas o cualquier otro tipo de indicaciones.

Los que tengan el tiempo y los conocimientos adecuados pueden explorar el código fuente de The Infinite Drum Machine en GitHub, algo en lo que invertiría el primero de los dos requisitos anteriores (si lo tuviera) para ver si puedo adquirir un poco más del segundo requisito.

Fotograma del vídeo de presentación de The Infinite Drum Machine [01m51s].

El segundo experimento que llamó mi atención fue A.I. Duet, una red neuronal ya entrenada que “responde” a las melodías que pueda crear una persona, creada utilizando Tone.js y herramientas de Magenta. Aunque en este caso todavía no hay una versión web donde jugar con el experimento, se puede explorar código fuente de A.I. Duet en GitHub.

Fotograma del vídeo de presentación de A.I. Duet [02m14s].

Debo admitir una cierta envidia sana al ver estos proyectos. Hace no tanto dejaba por aquí un apunte sobre redes neuronales que componían pistas de batería aprendiendo de Metallica y ya entonces me lamentaba de no tener tiempo para explorar estas materias.