Visual Game of Life Synthesis — User Guide
Conway B3/S23 cellular evolution mapped to generation-sized additive-synthesis events. Diagonal cell position controls frequency, optional X position controls constant-power stereo pan, and exact state history supports recurrence analysis and process visualization.
What this does
The script generates audio directly from a Conway Game of Life simulation. It first computes and stores the complete sequence of cellular states, then sonifies every stored generation.
preset / Random Soup → B3/S23 evolution → exact state history → diagonal frequency aggregation → Hann generation kernel → mono or X-based constant-power stereo → concatenation → one final target peak normalization
No input Sound is required.
Each generation occupies an equal segment of the requested audio Duration. Every live cell contributes to the sonification; there is no 25-cell voice limit in v1.1.1.
Quick start
- Choose one of the eight initial patterns.
- Set Grid size, Number of generations, and total Duration.
- Set Base frequency and Frequency range.
- Choose Mono or Stereo constant-power X pan.
- Use Edit details for sample rate, Random Soup probability/seed, boundary mode, animation, and Output peak.
- Run the script. The complete Life evolution is calculated first, then all generations are synthesized and concatenated.
Life evolution
Rule
The cellular automaton uses Conway's standard B3/S23 rule with an eight-cell Moore neighborhood:
live + 2 or 3 live neighbors → survival
all other cases → dead
For every transition, the script records exact counts of births, deaths, and survivors.
Boundary behavior
The default is Fixed dead: neighbors outside the finite grid are treated as dead and do not wrap back into the opposite edge.
If Wrap edges is enabled in Details, the grid becomes toroidal: left connects to right and top connects to bottom.
Pattern presets
| Preset | Initialization / automatic adjustment |
|---|---|
| Random Soup | Each cell is independently alive with the Details-page probability, default .35. A positive Random seed makes this initial state reproducible. |
| Glider | Centered 3×3 glider; Grid size is raised to at least 8. |
| Blinker | Centered three-cell period-2 oscillator; Grid size at least 7. |
| Pulsar | Centered 13×13 pulsar; Grid size at least 17. |
| Glider Gun (Gosper) | Centered 9×36 gun phase; Grid size at least 52 and Number of generations at least 40. |
| R-pentomino | Centered five-cell seed; Grid size at least 9. |
| Acorn | Centered seven-cell seed; Grid size at least 11. |
| Lightweight Spaceship | Canonical nine-cell LWSS in a 5×4 box; Grid size at least 10. |
Preset size adjustments happen before runtime safety checks, so the limits are evaluated using the actual grid and generation count that will be processed.
Cell-to-sound mapping
Diagonal position → frequency
Frequency depends on i + j, so cells on the same grid diagonal share exactly the same oscillator frequency.
diagonal count = 2 × GridSize - 1
f(d) = BaseFrequency
+ [(d - 1) / (diagonalCount - 1)] × FrequencyRange
The lowest diagonal maps to Base frequency; the opposite corner maps to Base frequency + Frequency range.
Population-dependent cell amplitude
If a generation contains N live cells, every live cell begins with:
This reduces per-cell gain as population increases without independently normalizing each generation.
Diagonal aggregation
Cells that share a diagonal also share frequency and local oscillator phase. Before synthesis, their gains are therefore added into one diagonal coefficient.
In Mono mode:
This is mathematically equivalent to adding those coherent equal-frequency sinusoids separately, while requiring far fewer Formula terms.
Stereo constant-power X pan
Stereo mode does not split the spectrum with filters. Instead, each live cell's horizontal grid coordinate controls its left/right gains before cells are aggregated by diagonal.
gainL = cos(πp / 2)
gainR = sin(πp / 2)
gainL² + gainR² = 1
The leftmost grid column is fully left, the rightmost column fully right, and the center uses equal-power gains of approximately .707 per channel.
Because several cells on one diagonal can have different X positions, left and right diagonal coefficients are accumulated separately.
Generation timing and synthesis kernel
Total Duration is divided equally:
Each generation is synthesized as its own Sound of exactly this duration.
Local Hann window
Every generation uses the same raised-cosine / Hann-shaped kernel:
The window is zero at both generation boundaries and reaches 1 at the midpoint. All active diagonal sinusoids inside that generation are multiplied by this common window.
Local oscillator phase
Each generation Sound is generated on its own local time axis beginning at zero:
Oscillator phase therefore restarts at each generation. The Hann kernel also reaches zero at each boundary, so successive generations join without a hard amplitude discontinuity.
Exact recurrence analysis
The script stores the exact binary board for every requested generation. Beginning with generation 2, each board is compared cell-by-cell against up to the six immediately preceding generations.
The first matching lag becomes that generation's recurrence period:
The final status reported by the script is:
- Extinct — final population is zero.
- Exact still life — final board exactly repeats period 1.
- Exact period-N recurrence — final board exactly repeats at period 2–6.
- Evolving / no exact period ≤ 6 — no tested exact recurrence at the final generation.
Controls
Main page
| Control | Default | Meaning |
|---|---|---|
| Preset | Random Soup | Initial Life state. |
| Grid size | 24 | Square cellular grid; must be at least 2 and may be increased by a preset. |
| Number of generations | 25 | Number of stored boards and audio generation segments; may be increased by Glider Gun. |
| Duration | 5.0 s | Total final Sound duration. |
| Base frequency | 200 Hz | Frequency assigned to the minimum diagonal. |
| Frequency range | 600 Hz | Added span from lowest to highest diagonal. |
| Spatial mode | Mono | Mono or X-position constant-power stereo. |
| Edit details | off | Opens technical, random, boundary, and animation settings. |
| Draw visualization | on | Draws the final process/QC display. |
| Play result | on | Plays the completed normalized Sound. |
Details page
| Control | Default | Meaning |
|---|---|---|
| Sample rate | 44100 Hz | Direct synthesis and output rate; script minimum is 2000 Hz. |
| Output peak | .90 | Final target peak normalization; valid >0…1. |
| Random Soup live probability | .35 | Independent initial live-cell probability, used only by Random Soup. |
| Random seed | 0 | 0 = unpredictable Random Soup; positive = reproducible Random Soup initialization. |
| Wrap edges | off | Off = fixed-dead boundary; on = toroidal boundary. |
| Animate evolution | off | Displays stored generations after synthesis. |
| Animation delay | .08 s | Pause between animation frames when not auditioning them. |
| Audition each animated generation | off | Plays the corresponding already-rendered segment from the final Sound during animation. |
Safety and runtime guards
Generation/state-history limits
Version 1.1.1 adds explicit limits before the state-history array is allocated:
maximum stored states = 1,000,000 cells
stored states = NumberOfGenerations × GridSize²
If either limit is exceeded, the script stops and asks for fewer generations and/or a smaller grid.
Per-generation audio resolution
Every generation must contain at least eight audio samples:
Nyquist safety
The highest mapped frequency is:
It must remain below 95% of Nyquist. Unsafe settings stop rather than compressing the frequency mapping.
Output and normalization
| Property | Behavior |
|---|---|
| Input | No input Sound required. |
| Channels | Mono or stereo according to Spatial mode. |
| Duration | Requested Duration, assembled from equal generation segments. |
| Sample rate | Details-page Sample rate. |
| Generation level | No per-generation peak normalization. |
| Stereo level | No independent left/right normalization. |
| Final normalization | One common Scale peak: OutputPeak after all generations are concatenated and, in stereo mode, after the channels are combined. |
| Object name | gol_<preset name>. |
The final level operation is target peak normalization, not an attenuate-only ceiling. A non-silent result may be raised or lowered to reach Output peak.
Because normalization occurs only once at the end, generation-to-generation level relationships and stereo balance are preserved up to one shared global gain factor.
Animation and audition
Animation does not re-run the cellular automaton. It reads the already-computed exact state history.
Each animation frame displays:
- the current board;
- new births in green and surviving cells in blue;
- generation number and live population;
- birth/death/survivor counts;
- exact recurrence period when one is detected within 1–6 generations;
- the current sound mapping summary.
If Audition each animated generation is enabled, the script extracts the corresponding rectangular segment from the already-finished output Sound and plays it. It does not synthesize or normalize a separate preview version.
If audition is off, Animation delay controls only the visual pause between frames. It does not change audio Duration or generation timing.
Final visualization and QC
The process visualization is separate from the optional frame-by-frame animation.
A — Cellular transition
The left board uses the generation with the largest birth+death turnover as a representative transition. Green cells are births, blue cells are survivors, and red X marks are deaths.
The right plot shows population as a continuous line with birth and death stems across all generations.
B — Life-to-sound score
Every generation occupies its actual time interval. Each occupied diagonal appears at its mapped frequency:
- line thickness increases with the number of live cells sharing that diagonal/frequency;
- a green onset marker indicates that at least one cell on that diagonal is newly born in that generation.
C — Audio mapping
The left mini-panel draws the actual Hann generation kernel. The right mini-panel draws either the X→constant-power L/R gain laws or, in Mono mode, the constant unity gain reference.
D — Measured output
The final normalized waveform is drawn directly from the generated Sound. Stereo mode displays separate left and right measured waveforms.
QC strip
The bottom strip reports grid/boundary, average and maximum population, total births/deaths, pitch range, final recurrence/extinction status, and measured final peak/RMS.