Exploring generative music using cellular automata

Or “Trying to make music without musical instruments”.


Notice: The experiments below have been optimized for Chrome on desktop. They work as of 22/05/2017. If you’re having issues on a particular browser or on a particular device you can contact me. Although these are meant to be quick/fun experiments, and issues are likely to be politely noted but never acted on.


Grid “music”

The Grid started out with an implementation of Conway’s Game of Life but turned into a Frankenstein of forced rules and senseless complexity as I tried to tweak the nodes’ behaviors to generate more interesting sound patterns.

It didn’t turn into much but it is notes and they are somewhat following a rhythm. Perhaps they’re sticking to the rhythm a bit too much though, and the grid tends to die out pretty consistently even after all those “refinements”.

(Processing + Gibber + jQuery)

To experience with sound:  click here (watch your volume)


+ Simple user input

Nothing suuuuuper exciting here:

*Print out notes to create an oblique “piano roll”.

*Play note when clicked on.

(Gibber + jQuery)

To experience with sound: click here


More interesting user input

This started out as a “multiplayer” experience in the context of a workshop about agent based art. It leveraged Socket.io to allow multiple users to leave trails on a Grid which was then processed through the Game of life cellular automaton.

I switched to Tone.JS because out of the box it produced less clipping than Gibber. I still appreciate Gibber for introducing me to WebAudio but Tone seemed like the better choice for generating random sounds rapidly and without a specific tempo. I also dropped Processing. Although this wasn’t really a conscious decision as much as the result of bare-bones prototyping.

Post workshop, I made some tweaks to get generate better trails, and decided against migrating the Websocket to an online environment. So you’ll only get the single player experience (“multiplayer” mostly resulted in noise anyway).


(Tone.JS + jQuery)

To experience with sound: click here

+ Recursive(-ish)

Sticking to jQuery and Tone.JS on this one. Turns out that excessively reading and writing to the DOM isn’t so bad, and I managed to get a lot of performance by cleaning up the code.

This iteration is a direct enhancement of the previous one with the addition of 2 levels of “recursive” automatas (Each level has it’s own Game of Life. Only the two biggest node types generate smaller nodes when they die), and a colour scheme.

(Tone.JS + jQuery)

To experience with sound: click here