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.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 3.2.1 (2026) License: MIT License Repo: Praat AudioTools
Contents:

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.

Core process:
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.

What is specific to this AudioTools variant: breakpoint time spacings are normalized to one cycle, while a separate bounded frequency walk determines that cycle's period. This is a controllable Gendy3-like pitch model, not a literal reconstruction of Xenakis's full GENDYN program or the higher-level score/control logic used to build Gendy3.

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:

The relative spacings are normalized after every evolution step so that:

dur[1] + dur[2] + ... + dur[N] = 1 cycle

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:

velocity[n+1] = reflect(velocity[n] + random acceleration) position[n+1] = reflect(position[n] + velocity[n+1])

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:

mean spacing = 1 / N pre-normalization candidate range = 0.08 × mean ... 4.0 × mean

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:

cycle period = 1 / current frequency

Frequency range factor is active in v3.2. The requested pitch region is:

Base frequency / factor ... Base frequency × factor

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:

pitch step limit = min(0.08, 0.50 × Duration step) new frequency = current frequency × (1 + random step)

The same selected probability distribution is used for this pitch increment, and the result is repeatedly reflected at the active frequency boundaries.

Bandwidth / aliasing note: only the cycle fundamental is bounded to practical Nyquist headroom. A piecewise-linear polygon naturally contains harmonics above its fundamental and is not explicitly band-limited. The “samples per breakpoint at top pitch” QC value is therefore a useful geometric-resolution warning, not an anti-aliasing guarantee.

Step distributions

The selected distribution is used to generate stochastic increments for the amplitude/time velocity walks and for the separate pitch walk.

DistributionImplementation in this script
UniformUniform draw directly inside ±maxStep.
CauchyInverse-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.
LogisticLogit 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.

PresetDur.BPBase / factorAmp / Dur stepDistributionFreq boundsSpatial
Gendy3-like 12-Point Motion12 s12180 Hz / ×2.50.18 / 0.15Cauchy30–1500 HzStereo Dual
High Fast Breakpoint Motion8 s8400 / ×1.50.25 / 0.20Cauchy100–3000Cross-Rotation
Deep Slow Mutation20 s1660 / ×1.80.10 / 0.08Gaussian20–400Stereo Dual
Bright Wide Motion10 s10800 / ×2.00.20 / 0.18Cauchy200–4000Cross-Rotation
Slow Narrow Evolution30 s20100 / ×1.20.05 / 0.04Gaussian30–500Stereo Dual
Chaotic Wide Motion8 s8200 / ×4.00.35 / 0.30Cauchy40–2500Cross-Rotation
Soft Logistic Motion15 s14150 / ×1.50.08 / 0.06Logistic50–800Stereo Dual
Medium Logistic Organism12 s12120 / ×2.20.12 / 0.10Logistic40–1000Cross-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

ModeImplementationChannels
MonoOne independently evolving breakpoint voice.1
Stereo DualTwo independently initialized and independently evolving GENDYN-family voices; voice 1 becomes left and voice 2 right.2
Equal-Power Cross-RotationTwo 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:

  1. captures the current polygon and current frequency;
  2. renders one cycle with Formula (part) at the final sample rate;
  3. updates amplitude and time-spacing second-order walks;
  4. normalizes breakpoint spacings;
  5. updates the bounded pitch walk;
  6. advances by the period that was just rendered.

A workload guard rejects settings whose worst-case generation estimate exceeds 150,000 cycles.

PropertyBehavior
DurationRequested/preset duration, up to 120 s. The final cycle is clipped at the requested end time.
Sample rateDirect synthesis at the selected 8–192 kHz rate.
ChannelsMono or stereo according to Spatial mode.
Edge fadeOne final linear fade at both outer edges, capped at 20% of total duration.
Normalize outputIf enabled, every non-zero result receives target peak normalization to 0.90.
Output namegendyn_<preset name> with spaces replaced by underscores.

Visualization and QC

PanelWhat it actually shows
A — Breakpoint PolygonThe actual voice-1 polygon at the start, around the midpoint, and at the final rendered cycle.
B — Selected Breakpoint WalkActual BP1 amplitude trajectory and BP1 relative segment duration through time.
C — Controlled Pitch WalkThe actual voice-1 cycle-frequency trajectory against the effective reflecting frequency boundaries.
D — Model → MeasurementMeasured 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