GENDYN Family Dynamic Stochastic Synthesis — User Guide
A GENDYN-family dynamic stochastic synthesizer built from an evolving breakpoint polygon. Breakpoint amplitudes and relative time spacings follow second-order stochastic walks; a separate bounded pitch walk controls cycle duration. The result is rendered directly at the requested audio sample rate.
What this does
GENDYN Synthesis generates a waveform as a closed polygon made of N breakpoints. Every breakpoint has an amplitude and a relative position within one cycle. Successive cycles are not identical: both breakpoint amplitudes and relative time spacings evolve stochastically.
random acceleration → breakpoint velocity walks → amplitude/time-spacing walks → normalized polygon → one rendered cycle → repeat
The waveform between adjacent breakpoints is linear. The final breakpoint connects back to breakpoint 1, so every generated cycle is closed. The cycle period is controlled by a separate bounded pitch walk.
This is direct time-domain synthesis. There are no oscillators, filters, FFT frames, grains, or source recordings in the synthesis path.
Relation to Xenakis's Gendy3
The current version deliberately uses the label GENDYN family rather than claiming to reconstruct Xenakis's complete historical program.
Its closest historical connection is the use of second-order stochastic motion: random values perturb an intermediate walk, and that walk in turn drives the breakpoint's amplitude or time position. This reflects the cascaded/secondary-walk principle associated with the Gendy3 version of dynamic stochastic synthesis.
Accordingly, the preset Gendy3-like 12-Point Motion should be understood as a mechanism-oriented reference configuration, not an “authentic Gendy3” emulation.
Breakpoint polygon
For N breakpoints, the script maintains:
- amp[i] — breakpoint amplitude.
- dur[i] — relative spacing from breakpoint i to the next breakpoint.
The relative spacings are normalized after every evolution step so that:
For each rendered cycle, cumulative duration values define the breakpoint positions on normalized phase 0–1. Linear interpolation then connects each breakpoint to the next, including the final breakpoint back to the first.
Initial durations are equal. Initial amplitudes are random within ±25% of the selected amplitude barrier, so the first waveform is already non-flat but relatively restrained.
Second-order stochastic motion
Version 3.2 does not perturb breakpoint positions directly with independent random steps. Instead, each breakpoint has a persistent velocity for amplitude and a separate velocity for relative time spacing:
Amplitude motion
Amplitude step is the maximum magnitude of the amplitude velocity. The random acceleration fed into that velocity uses a nominal step of 0.30 × Amplitude step. Velocity is repeatedly reflected inside ±Amplitude step, then the resulting breakpoint amplitude is repeatedly reflected inside ±Amplitude barrier.
Time-spacing motion
Duration step similarly bounds the relative-duration velocity. Random acceleration uses 0.30 × Duration step. Before normalization, each candidate segment spacing is reflected into a positive range based on the mean spacing:
The complete set of segment spacings is then normalized so the polygon still occupies exactly one cycle.
Reflecting barriers
The barrier routine uses repeated reflection rather than a one-shot clamp. A value that crosses a boundary is mirrored back into range; if a large excursion crosses again, reflection continues, with a final safety clamp only as a fallback.
Pitch model
The breakpoint spacings describe the shape inside a normalized cycle. A separate frequency variable controls how long that cycle lasts:
Frequency range factor is active in v3.2. The requested pitch region is:
That region is intersected with Minimum frequency, Maximum frequency, and the practical limit 0.45 × sample rate. A factor of 1 therefore fixes the pitch, provided the Base frequency lies inside the Min/Max boundaries.
Pitch walk
After each cycle, the current frequency receives a multiplicative stochastic step:
The same selected probability distribution is used for this pitch increment, and the result is repeatedly reflected at the active frequency boundaries.
Step distributions
The selected distribution is used to generate stochastic increments for the amplitude/time velocity walks and for the separate pitch walk.
| Distribution | Implementation in this script |
|---|---|
| Uniform | Uniform draw directly inside ±maxStep. |
| Cauchy | Inverse-Cauchy draw from U=0.01–0.99, divided by 5 and truncated to ±2 before scaling. |
| Gaussian (extension) | Normal draw with SD = 0.5×maxStep, truncated to ±2×maxStep. |
| Logistic | Logit transform from U=0.01–0.99, divided by 5 and truncated to ±2 before scaling. |
Uniform, Cauchy and Logistic belong to the broader GENDYN-family vocabulary. Gaussian is explicitly retained here as an AudioTools extension.
Random seed
Random seed = 0 uses an unpredictable random state. A positive seed reproduces the initial polygons and the complete stochastic evolution of both voices for the same settings. After synthesis, Praat's unpredictable random initialization is restored.
Presets
Presets set Duration, breakpoint count, Base frequency, frequency-range factor, amplitude and duration steps, distribution, amplitude barrier, frequency boundaries, and Spatial mode. They do not override Sample rate, Random seed, Edge fade, Normalize output, Draw visualization, or Play result.
| Preset | Dur. | BP | Base / factor | Amp / Dur step | Distribution | Freq bounds | Spatial |
|---|---|---|---|---|---|---|---|
| Gendy3-like 12-Point Motion | 12 s | 12 | 180 Hz / ×2.5 | 0.18 / 0.15 | Cauchy | 30–1500 Hz | Stereo Dual |
| High Fast Breakpoint Motion | 8 s | 8 | 400 / ×1.5 | 0.25 / 0.20 | Cauchy | 100–3000 | Cross-Rotation |
| Deep Slow Mutation | 20 s | 16 | 60 / ×1.8 | 0.10 / 0.08 | Gaussian | 20–400 | Stereo Dual |
| Bright Wide Motion | 10 s | 10 | 800 / ×2.0 | 0.20 / 0.18 | Cauchy | 200–4000 | Cross-Rotation |
| Slow Narrow Evolution | 30 s | 20 | 100 / ×1.2 | 0.05 / 0.04 | Gaussian | 30–500 | Stereo Dual |
| Chaotic Wide Motion | 8 s | 8 | 200 / ×4.0 | 0.35 / 0.30 | Cauchy | 40–2500 | Cross-Rotation |
| Soft Logistic Motion | 15 s | 14 | 150 / ×1.5 | 0.08 / 0.06 | Logistic | 50–800 | Stereo Dual |
| Medium Logistic Organism | 12 s | 12 | 120 / ×2.2 | 0.12 / 0.10 | Logistic | 40–1000 | Cross-Rotation |
Edit stochastic boundaries opens after preset application, allowing the chosen preset's Distribution, Amplitude barrier, Min/Max frequency, Random seed, and Edge fade to be fine-tuned.
Spatial modes
| Mode | Implementation | Channels |
|---|---|---|
| Mono | One independently evolving breakpoint voice. | 1 |
| Stereo Dual | Two independently initialized and independently evolving GENDYN-family voices; voice 1 becomes left and voice 2 right. | 2 |
| Equal-Power Cross-Rotation | Two independent voices are mixed into both channels with complementary square-root gains. The pan trajectory is 0.5 + 0.46 sin(2π×0.08t); voice 2 moves opposite voice 1. | 2 |
Cross-Rotation includes an additional 1/√2 factor in each stereo channel to keep the combined power of two approximately uncorrelated voices under control.
Rendering and output
Unlike older versions of the guide, v3.2.1 does not synthesize at an intermediate control rate and then resample. Every polygon cycle is written directly into an output Sound created at the requested final sample rate.
For each generation the script:
- captures the current polygon and current frequency;
- renders one cycle with
Formula (part)at the final sample rate; - updates amplitude and time-spacing second-order walks;
- normalizes breakpoint spacings;
- updates the bounded pitch walk;
- advances by the period that was just rendered.
A workload guard rejects settings whose worst-case generation estimate exceeds 150,000 cycles.
| Property | Behavior |
|---|---|
| Duration | Requested/preset duration, up to 120 s. The final cycle is clipped at the requested end time. |
| Sample rate | Direct synthesis at the selected 8–192 kHz rate. |
| Channels | Mono or stereo according to Spatial mode. |
| Edge fade | One final linear fade at both outer edges, capped at 20% of total duration. |
| Normalize output | If enabled, every non-zero result receives target peak normalization to 0.90. |
| Output name | gendyn_<preset name> with spaces replaced by underscores. |
Visualization and QC
| Panel | What it actually shows |
|---|---|
| A — Breakpoint Polygon | The actual voice-1 polygon at the start, around the midpoint, and at the final rendered cycle. |
| B — Selected Breakpoint Walk | Actual BP1 amplitude trajectory and BP1 relative segment duration through time. |
| C — Controlled Pitch Walk | The actual voice-1 cycle-frequency trajectory against the effective reflecting frequency boundaries. |
| D — Model → Measurement | Measured spectrogram of a representative final-output channel with the actual voice-1 cycle-frequency trajectory overlaid. |
For stereo output, the measured spectrogram uses whichever final channel has the higher whole-file RMS.
The QC strip reports second-order motion settings, generation count, seed, effective pitch bounds, average samples per breakpoint at the highest active pitch, resolution status, and pre/post-normalization levels.
Further Reading
- Xenakis, I. (1992). Formalized Music: Thought and Mathematics in Composition, revised and expanded edition. Pendragon Press. The revised edition includes chapters on Dynamic Stochastic Synthesis and the GENDY program.
- Hoffmann, P. (2000). “The New GENDYN Program.” Computer Music Journal, 24(2), 31–38. DOI: 10.1162/014892600559290. Detailed discussion and reimplementation of GENDYN-family dynamic stochastic synthesis.
- Luque, S. (2009). “The Stochastic Synthesis of Iannis Xenakis.” Leonardo Music Journal, 19, 77–84. DOI: 10.1162/lmj.2009.19.77. Historical and technical overview of Xenakis's stochastic-synthesis algorithms.