Modulation in WOPR

WOPR's modulation is unlike any other synthesizer. Where traditional synths have used LFOs or various playable controls to modulate parameters, WOPR is driven by a nest of artificial creatures called "cellular automata."

The cellular automata in WOPR live by a set of rules known as the "Game of Life," invented by mathematician John Conway in 1970. The rules of Conway's Game of Life decide which cells in the modulation grid live and die, creating a new generation once every beat of the tempo clock.

In the grid pictured here, the green cells have just been born, the blue ones are survivors and the red cells are 'immortal' cells, created by tapping the 'Lock cells' button. Immortal cells are an important extension to the Game of Life created especially for WOPR to help generate musically useful repeating patterns.



Conway's Game of Life

The Game of Life is a very simple set of rules which decide which cells in a grid live, die or get born each generation. Cells are either alive, or dead. Living cells are marked with a blue, green or red square on the grid; dead cells are empty. Each cell in the grid is examined in turn, with the rules looking only at the cell's eight immediate neighbors:
0 or 1 neighbors
The cell dies from loneliness and disappears.
2 or 3 neighbors
The cell survives. It'll be marked blue in WOPR's grid.
3 or more neighbors
Living cells die from overcrowding and disappear from the grid.
Exactly 3 neighbors
A dead cell with exactly 3 live neighbors is born again and turns green in the grid.
These extremely simple rules lead to amazingly complex behaviour. This simple pattern, called a glider, will march diagonally across the grid forever. Gliders are a kind of pattern called "spaceships."

Whereas this structure, called the beehive, will never change (unless another cell appears in the neighborhood of any of its member cells.) Beehives are an example of a class of pattern calld "still lives"; other examples are blocks, boats, tubs, and toads. The internet is full of the fruits of 40 years research into the Game of Life. There's a very comprehensive bestiary of patterns here at conwaylife.com.

The Game of Life is usually played on a very large field. WOPR's 16x16 grid is tiny by Life standards, but this gives it some interesting properties which make it particularly useful for modulation purposes.

The grid wraps. The top and bottom edges are joined, as are the left and right sides. (The grid is effectively the surface of a torus, laid flat.) That's useful for a few reasons: things like gliders can travel diagonally across the grid forever, rather than disappearing off into the distance. Two or three parallel gliders can set up waves of modulation over the matrix, guaranteed to run forever.

Wrapping also leads to interactions between cells at the extreme edges, something which just doesn't happen in regular Life. For example, try a right-facing Queen Bee near the left edge of WOPR's grid. The gliding shape and the debris at the left interact thanks to the wrapping, which eventually leads to a large, period-3 oscillator which is used in some of the factory presets.


How WOPR uses the Game of Life

The 16x16 grid shown above is further divided into 16 blocks of 4x4 cells. These larger blocks are joined to synthesizer parameters using the modulation matrix, shown below. Once each beat, WOPR counts the number of living cells in the associated block and uses that to set the corresponding parameter's value. Component colors are show in the grid to help identify those blocks which are modulating a parameter.

Parameters can change instantly, or smoothly over the duration of a beat (eg at 120bpm the parameters change over half a second.) To keep the modulation even more musical, players can set a range over which the modulation will operate. This effectively clamps the parameter between a lower and upper limit, which can produce much more variation in the sound even with a very sparse pattern in the grid. Players can always set parameters manually by simply swiping over the parameter's knob or slider.