Each cell is a frequency bin. Every lit cell sounds together. As the automaton evolves, the spectrum flows into the next row. Inspired by Rayne’s spectral-automaton proposal and William Sethares’ work on tuning and timbre.
A 32-cell ring uses the standard elementary rule lookup. The seed initializes xorshift32; each cell takes its next high bit. No warm-up. Bin k has frequency 110 × (k + 1)p Hz, with p = 1 or 1.12. An occupied cell has amplitude 1/64 in each of two voices. Dense rows are louder; silence stays silent. The fixed gain leaves headroom without changing the row’s amplitude recipe.
Oscillators keep their phase across generations. Amplitudes and, in adapted mode, frequencies follow half-cosine interpolation over 0.65 seconds, approximated by 65-point automation curves. Start and Stop have short fades. The selected row can also be held as a sustained instrument tone.
The adaptation keeps every occupied amplitude and searches each frequency within ±20% of its nearest original bin gap. Bins cannot cross. A deterministic coordinate search reduces the sum of pair roughness across both voices, including pairs within each voice. It uses the minimum-amplitude weighting in Sethares’ published dissonance calculator. Scores are at the fixed reference amplitude, before the volume control.
This is a constrained local improvement, not a unique or perfect timbre. It optimizes endpoint rows; intermediate morphs may be rougher. Equal amplitudes do not guarantee equal perceived loudness, and the roughness model does not measure beauty or musical interest. Sethares’ account also discusses designing timbres for specified tunings. Here the CA remains the spectral scaffold; the chosen interval supplies the adaptation target.
Change the ratio to 1.5 or try the stretched grid, then compare Literal and Adapted on the same held row. Editing the upper controls takes effect only after Build. Mode changes and row selection stop playback. JSON contains every row and both frequency sets. No autoplay or uploaded audio.