Cyclegen

A waveform kept as a list of knum breakpoints, one per control point of the cycle. Each breakpoint remembers its own amplitude and steps from there, so the shape drifts instead of repeating, while a frequency list moves the pitch once per cycle. The waveform is written point by point; nothing is filtered, and there is no oscillator underneath.

The dial is stiffness. At 0 every breakpoint walks freely from where it was, which is the Xenakis breakpoint-walk lineage. At 1 each one is pulled all the way onto a fixed template, which is a waveform selected rather than walked. In between, the walk is reeled in toward the template without reaching it. The top panel draws both, so the dial is visible as well as audible.

Start with the gain low.

walked breakpoints template audio output
presets:

randomise:
waveform
template
distribution
frequency sequence

Reading the controls. templateType 0–4 is sine, saw, triangle, square, flat; flat means the walk has no attractor even at full stiffness. ampDist 0–6 is linear, Cauchy, logistic, hyperbolic cosine, arcsine, exponential, sinus, which is the distribution set from Xenakis's dynamic stochastic synthesis; ampDistParam shapes it. seqMode 0–3 is forward, reverse, pingpong, random, and steps the frequency list once every repeats cycles.

One difference from the UGen: here knum rebuilds the breakpoint memory live. In SuperCollider it is fixed when the synth is built, which is why fern's knumFrom/knumTo only bite on the next ~gen.(\fern).