False Mirror

False Mirror Web-Based Drone/Noise Synthesizer

2024-03-29

As part of the relaunch of my False Mirror website I did some experimenting with the web audio API to build something I had in my mind for years now: Combining Conway’s Game of Life with a sound generating algorithm to produce an interactive and potentially endlessly evolving layer of audio material.

I hereby present the False Mirror Web-Based Drone/Noise Synthesizer.

Cellular Automaton

Conway’s Game of Life is a cellular automaton on a two-dimensional grid. Each cell on the grid can either be alive or dead. An initial set of conditions decides the evolution of further grid states. These propagation rules are very simple:

  • Any alive cell with more than 3 alive neighbors dies.
  • Any alive cell with 1 or 0 alive neighbors dies
  • Any alive cell with 2 or 3 neighbors stays alive.
  • Any dead cell with exactly 3 alive neighbors becomes alive.

A cell can have up to 8 neighbors, including diagonally adjacent cells.

With this implementation I decided to wrap the grid around the borders, creating an infinite space which allows us to create a potentially infinite stream of sound textures.

Sound Generation

For the sound generation I wanted to achieve an interaction between the grid cells and the audio as direct and graspable as possible. In my experience with interactive sound installations the more complex the interaction between the user interface and the audio is, the harder it is to actually play it as an instrument and the less people are willing to explore what is happening.

Thus I went with the most straightforward relation:

  • up/down relates to higher/lower frequencies
  • left/right relates to left/right stereo balance

The sound is generated by looping through a one second buffer filled with random floats (i.e. almost white noise), this buffer is the input for each of the n filter blocks (assuming n x n grid dimensions). Each row of the grid has one bandpass filter with its center frequency set to a harmonic overtone of a given base frequency. The filter output signal is then split into a left and right channel with individual gain and pan settings. So if there are only alive cells on the left side of the grid, audio can only be heard on the left channel. The panning is calculated by the center position of alive cells in each of the left and right halves of the grid. The more cells there are alive, the louder the output from the specific filter block is.

The output of each filter block is routed into a left and right FFT convolver node to create a spacious and more textural sound. The output is then mixed together into a dynamics compressor to round out any amplitude spikes.

The second aspect of direct interaction is the timing. The “game engine” that drives Conway’s Game of Life calculates the new state of the cells during each tick. The frequency of these ticks is directly coupled to resulting changes happening in the audio engine. Since I chose one second for the tick interval this also matches the length of our white noise buffer, creating subtle rhythmic patterns to directly align with changes in the grid.

You can find a block diagram as well as some of my notes I wrote down during the creation of this instrument.

Feel free to contact me if you have any question about the instrument or its implementation.