GENDYN Synthesis — User Guide

Dynamic stochastic synthesis based on Iannis Xenakis's GENDY3 algorithm: breakpoint evolution with stochastic barriers for organic, unpredictable sonic textures.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 1.0 (2025) License: MIT License Repo: https://github.com/ShaiCohen-ops/Praat-plugin_AudioTools
Contents:

What this does

🎻 Tribute to Iannis Xenakis (1922–2001)

GENDY3 (1991): Xenakis's pioneering work in dynamic stochastic synthesis. The name derives from "GENeration DYNAmique" – dynamic generation. Xenakis applied principles of probability theory, statistical mechanics, and game theory to musical composition, creating what he called "stochastic music." This plugin implements a Praat-based interpretation of his GENDY3 algorithm for sound synthesis.

This script implements GENDYN (Dynamic Stochastic) Synthesis — a breakpoint-based synthesis method where waveform parameters evolve stochastically within defined barriers. Core concept: A waveform defined by breakpoints (amplitude/duration pairs) undergoes continuous random mutations, with evolution constrained by barrier conditions. The result: Organic, evolving sonic textures that are neither purely random nor deterministic, occupying the fascinating space between order and chaos.

Key Features:

What is stochastic synthesis? Traditional synthesis: Oscillators, filters, envelopes with fixed or LFO-modulated parameters. Stochastic synthesis: Parameters evolve according to probability distributions, creating inherently unpredictable yet constrained evolution. Xenakis's approach: Treat sound particles as molecules in Brownian motion, subject to statistical laws. GENDYN's innovation: Instead of pre-composing sounds, define rules for sound generation and let the system evolve. Advantages: (1) Organic quality: Sounds evolve like natural processes. (2) Unpredictability: Each generation unique yet related. (3) Complexity from simplicity: Simple rules generate complex results. (4) Bridge composition/synthesis: Compositional thinking built into synthesis method. Use cases: Experimental music, sound design for film/games, generative art, academic study of stochastic processes, meditation/ambient music.

Technical Implementation: (1) Breakpoint initialization: Create N breakpoints with random amplitudes and equal durations. (2) Phase accumulation: Traverse breakpoints at current frequency rate. (3) Linear interpolation: Generate samples between breakpoints. (4) Stochastic evolution: After each cycle, mutate amplitudes, durations, and frequency using chosen distribution. (5) Barrier application: Constrain mutations to prevent extreme values. (6) Control rate synthesis: Generate at high control rate, then resample to audio rate. (7) Spatial processing: Apply mono/stereo/rotating spatialization. (8) Visualization: Display waveform detail and spectrogram of result.

Quick start

  1. In Praat, ensure no objects are selected (GENDYN creates from scratch).
  2. Run script…GENDYN_Synthesis.praat.
  3. Choose Preset or select "Custom" for manual control.
  4. Set Duration (seconds) and Sample rate.
  5. Configure Number of breakpoints (complexity) and Base frequency.
  6. Select Distribution type (Cauchy = Xenakis's choice).
  7. Set Amplitude/Duration steps (mutation sizes).
  8. Define Frequency barriers (min/max Hz to contain evolution).
  9. Choose Spatial mode (mono, stereo, or rotating).
  10. Enable Draw visualization to see waveform and spectrogram.
  11. Click OK — synthesis begins, progress shown in Info window.
Quick tip: Start with presets — "GENDY3 Tribute" for authentic Xenakis sound, "Insect Swarm" for granular textures, "Slow Evolution" for ambient drones. Use Cauchy distribution for Xenakis's characteristic "heavy-tailed" mutations (more extreme jumps). Breakpoints (8-16) balance complexity and evolution speed. Amplitude step (0.1-0.2) controls how much amplitudes change each generation. Duration step (0.1-0.2) controls timing mutations. Barriers prevent evolution into inaudible extremes. Visualization shows both waveform detail and spectral evolution. Longer durations (30+ seconds) reveal gradual transformation. Each run is unique — seed is random.
Important: COMPUTATIONALLY INTENSIVE — longer durations with many breakpoints require significant processing. No undo — save output if valuable. Stochastic nature means results unpredictable — same parameters yield different outputs each run. Barriers essential — without frequency barriers, sound may evolve into ultrasonic or subsonic ranges. Cauchy distribution can produce extreme jumps — use smaller steps or barriers. Control rate auto-adjusted based on frequency and breakpoints. Visualization shows first 300ms of waveform and full spectrogram. Stereo modes create two independent evolutions or rotating panning. Be patient for long durations — progress reported every 2 seconds.

GENDYN Theory

The Xenakis Philosophy

🎼 Stochastic Music Principles

From "Formalized Music" (1963): Xenakis proposed applying probability theory to music composition. Instead of writing specific notes, define stochastic processes that generate music. GENDYN extends this to sound synthesis: instead of defining specific waveforms, define stochastic processes that generate waveforms.

Key concepts:

  • Brownian motion: Sound particles as molecules in random motion
  • Markov chains: Next state depends only on current state
  • Probability distributions: Different statistical models for different musical results
  • Constraints/barriers: Freedom within limits — artistic control of stochastic processes

Breakpoint Waveform Model

📈 Breakpoint Representation

A waveform defined by N breakpoints, each with:

  • Amplitude: Value at breakpoint (-1 to 1)
  • Duration: Time to next breakpoint (relative proportion)

Waveform generation: Linear interpolation between consecutive breakpoints. When last breakpoint reached, wrap to first (cyclic waveform).

Breakpoint structure for N = 4: BP1: amplitude = a1, duration = d1 (fraction of cycle) BP2: amplitude = a2, duration = d2 BP3: amplitude = a3, duration = d3 BP4: amplitude = a4, duration = d4 Total duration = d1 + d2 + d3 + d4 = 1.0 (one cycle) Waveform generation (phase φ from 0 to 1): if φ < d1: output = a1 + (a2 - a1) × (φ / d1) else if φ < d1 + d2: output = a2 + (a3 - a2) × ((φ - d1) / d2) else if φ < d1 + d2 + d3: output = a3 + (a4 - a3) × ((φ - d1 - d2) / d3) else: output = a4 + (a1 - a4) × ((φ - d1 - d2 - d3) / d4) Frequency control: phase_increment = frequency / samplerate Actual time between breakpoints = duration × (1 / frequency)

Stochastic Evolution

🎲 Mutation Process

After each complete cycle (all breakpoints traversed), three types of mutation occur:

  1. Amplitude mutations: Each breakpoint amplitude changes randomly
  2. Duration mutations: Each breakpoint duration changes randomly, then normalized
  3. Frequency mutation: Fundamental frequency changes randomly

Evolution rate: Controlled by step size parameters. Larger steps = more dramatic changes per generation.

Mutation formulas (one generation): FOR each breakpoint i (1 to N): AMPLITUDE MUTATION: delta_amp = random_step(amplitude_step, distribution) new_amp[i] = amp[i] + delta_amp Apply barrier: -barrier ≤ new_amp[i] ≤ barrier DURATION MUTATION: delta_dur = random_step(duration_step, distribution) new_dur[i] = dur[i] × (1 + delta_dur) Constrain: new_dur[i] ≥ 0.01 (minimum) END FOR DURATION NORMALIZATION: total_dur = sum(new_dur[1..N]) FOR i = 1 to N: dur[i] = new_dur[i] / total_dur FREQUENCY MUTATION: delta_freq = random_step(duration_step, distribution) × 0.5 new_freq = current_freq × (1 + delta_freq) Apply barrier: min_freq ≤ new_freq ≤ max_freq current_freq = new_freq Where random_step(step_size, distribution) returns value in range approximately [-step_size, step_size] according to chosen distribution.

Barrier System

🚧 Constrained Freedom

Barriers prevent evolution from escaping musically useful ranges. When a value hits a barrier, it "bounces" back into allowed range.

Types of barriers:

  • Amplitude barriers: Keep waveform within [-barrier, barrier] (typically 0.9-0.95)
  • Frequency barriers: Keep fundamental within [min_freq, max_freq] (audible range)

Bounce behavior: If value exceeds barrier by amount X, it's set to barrier - X (reflection). If still outside, set to barrier.

Barrier application algorithm: procedure applyBarrier(value, min, max): result = value if result < min: # Bounce from lower barrier result = min + (min - result) if result > max: result = min # Double bounce to min elsif result > max: # Bounce from upper barrier result = max - (result - max) if result < min: result = max # Double bounce to max return result Example (amplitude barrier = 0.9): Current amp = 0.8 Mutation adds +0.2 → new amp = 1.0 1.0 > 0.9 → bounce: 0.9 - (1.0 - 0.9) = 0.8 Result: 0.8 (back where started) Example with extreme mutation: Current amp = 0.85 Mutation adds +0.3 → new amp = 1.15 1.15 > 0.9 → bounce: 0.9 - (1.15 - 0.9) = 0.65 0.65 within range → result: 0.65

Probability Distributions

📊 Statistical Models for Mutation

1. Uniform Distribution

Equal probability across range [-step, step]

Character: Predictable, bounded mutations

Use: Gentle, controlled evolution

2. Cauchy Distribution (Xenakis's Choice)

Heavy-tailed distribution: f(x) = 1 / [πγ(1 + ((x-x₀)/γ)²)]

Character: Mostly small changes with occasional extreme jumps

Use: Dramatic evolution, surprising changes

3. Gaussian (Normal) Distribution

Bell curve: f(x) = (1/σ√2π) exp[-½((x-μ)/σ)²]

Character: Small changes common, large changes rare

Use: Natural, organic evolution

4. Logistic Distribution

Similar to Cauchy but with less extreme tails

Character: Smooth, moderate evolution

Use: Balanced stochastic process

Implementation details: UNIFORM: result = randomUniform(-step, step) CAUCHY (heavy tails): u = randomUniform(0.01, 0.99) # avoid extremes cauchy = tan(π × (u - 0.5)) result = step × cauchy / 5 Clamp to [-2×step, 2×step] # practical limits GAUSSIAN: result = randomGauss(0, step × 0.5) LOGISTIC: u = randomUniform(0.01, 0.99) logistic = ln(u / (1 - u)) result = step × logistic / 5 Clamp to [-2×step, 2×step] Note: Cauchy/Logistic divided by 5 and clamped to keep mutations comparable across distributions.

Spatial Processing Modes

Three spatialization options: 1. MONO: Single voice, single evolution process 2. STEREO DUAL: Two independent voices, each with own evolution Voice 2 initialized with slight frequency variation (±5%) Each evolves independently with same parameters Combined to stereo (left = voice1, right = voice2) 3. ROTATING: Two voices with rotating amplitude panning Voice1: amplitude × (0.5 + 0.5 × cos(2π × 0.08 × time)) Voice2: amplitude × (0.5 + 0.5 × sin(2π × 0.08 × time)) 0.08 Hz = completes pan cycle every 12.5 seconds Creates slowly moving stereo image Control rate note: Synthesis first occurs at high control rate (8-22 kHz) Then resampled to audio rate (e.g., 44.1 kHz) Control rate auto-adjusted: max(8000, base_freq × breakpoints × 2)

Complete Processing Pipeline

SETUP: Parse parameters (preset or custom) Generate unique ID for objects Calculate control rate based on frequency/breakpoints Initialize breakpoint arrays (amplitudes, durations) INITIALIZATION: Amplitudes: randomUniform(-0.5, 0.5) Durations: equal (1.0 / number_of_breakpoints) Frequency: base_frequency_Hz Phase: 0 Generation counter: 0 MAIN SYNTHESIS LOOP (control rate): FOR each control sample: # Find current segment cum_dur = 0 FOR bp = 1 to N: next_cum_dur = cum_dur + dur[bp] IF phase ≥ cum_dur AND phase < next_cum_dur: next_bp = (bp mod N) + 1 local_phase = (phase - cum_dur) / dur[bp] value = amp[bp] + (amp[next_bp] - amp[bp]) × local_phase BREAK cum_dur = next_cum_dur # Store sample Set control sample to value # Advance phase phase = phase + (current_freq / control_rate) # Wrap and evolve IF phase ≥ 1: phase = phase - 1 generation = generation + 1 # Evolve amplitudes, durations, frequency # Apply barriers # Normalize durations Report progress every 2 seconds POST-PROCESSING: Resample control sound to audio rate Apply 50ms fade in/out Apply spatial processing (mono/stereo/rotating) Normalize peak to 0.9 (if enabled) VISUALIZATION (if enabled): Draw title and parameters Draw waveform (first 300ms) Draw spectrogram (full duration) Display generation count OUTPUT: Sound object named "gendyn_[preset]_[UID]" Select object for playback/further processing

Algorithm Details

Control Rate Optimization

Control rate calculation: base_rate = 8000 Hz (minimum) needed_rate = base_frequency_Hz × number_of_breakpoints × 2 control_rate = max(base_rate, needed_rate) control_rate = min(control_rate, 22050) # maximum Rationale: Each breakpoint segment should have multiple samples Factor 2 ensures at least 2 samples per segment Minimum 8000 Hz for reasonable waveform definition Maximum 22050 Hz (half typical audio rate) for efficiency Example: base_freq = 180 Hz, breakpoints = 12 needed_rate = 180 × 12 × 2 = 4320 Hz control_rate = max(8000, 4320) = 8000 Hz Example (high): base_freq = 1000 Hz, breakpoints = 20 needed_rate = 1000 × 20 × 2 = 40000 Hz control_rate = min(40000, 22050) = 22050 Hz Number of control samples: n_control_samples = round(duration_s × control_rate) Resampling: Control sound resampled to audio rate using Praat's Resample command with 50-point interpolation

Generation Counter Significance

🔢 Measuring Evolution

One generation = one complete traversal of all breakpoints (one cycle of the waveform).

Generation rate = frequency (Hz) = cycles per second.

Total generations in output = frequency × duration (approximately).

Musical interpretation: Each generation is like a "note" in traditional music, but here notes evolve. Higher frequency = faster evolution. More breakpoints = more complex evolution per generation.

Generations calculation: Approximate generations = base_frequency_Hz × duration_s Example: 180 Hz × 12 seconds = 2160 generations Example: 20 Hz × 30 seconds = 600 generations Actual generations may differ because: 1. Frequency evolves (changes during synthesis) 2. Phase wrapping occurs at phase ≥ 1 (not exactly at 1.0) 3. Initial phase not zero Display in Info window: "Total generations: X" shows actual count Progress reports show current generation during synthesis Evolution per generation: Amplitudes: N mutations (one per breakpoint) Durations: N mutations + normalization Frequency: 1 mutation Total: 2N + 1 mutations per generation For N=12: 25 mutations per generation For 2160 generations: 54,000 total mutations

Visualization System

Three-part visualization: 1. TITLE AREA (top): Main title: "GENDYN Synthesis — [Preset Name]" Subtitle: "Tribute to Iannis Xenakis (1922–2001)" Drawn in separate viewport for clean layout 2. WAVEFORM DETAIL: Shows first 300ms (or less if shorter than total) Demonstrates waveform character and complexity Color: Dark green (0.2, 0.5, 0.3) for visual clarity Y-axis: -1 to 1 (amplitude range) X-axis: time in milliseconds 3. SPECTROGRAM: Full duration spectrogram Frequency range: up to min(8000, max_frequency_Hz × 1.5) Uses Praat's Spectrogram object Window: 0.02s, maximum frequency, 0.005s time step Dynamic range: 50 dB, window shape: Gaussian 4. FOOTER: Parameter summary: "BP: N | Amp: X | Dur: Y | Dist | Gen: Z" Centered at bottom Viewport layout: Title: viewport(0,7, 0.5,1.2) Waveform: viewport(0,7, 1.2,2.8) with inner margins Spectro: viewport(0,7, 3.0,5.6) with inner margins Footer: viewport(0,7, 5.7,6.2) Inner margins: left=0.6, right=6.5 for waveform/spectro

Built-in Presets

🎨 Curated Sound Worlds

Each preset embodies a different sonic character while maintaining the GENDYN stochastic philosophy. Presets are starting points — adjust parameters to explore variations.

Xenakis Tributes

PresetParametersCharacterDuration
GENDY3 Tribute12 BP, 180 Hz, Cauchy, 2.5 rangeAuthentic Xenakis: metallic, complex, evolving12s
Deep Mutations16 BP, 60 Hz, Gaussian, 1.8 rangeSlow, profound evolution, subharmonic richness20s
Whispered Stochasm14 BP, 150 Hz, Logistic, 1.5 rangeDelicate, breathy, subtle transformations15s

Textural Explorations

PresetParametersCharacterDuration
Insect Swarm8 BP, 400 Hz, Cauchy, 1.5 rangeGranular, buzzing, dense high-frequency activity8s
Crystalline Fractures10 BP, 800 Hz, Cauchy, 2.0 rangeGlass-like, brittle, sharp transients10s
Electronic Organisms12 BP, 120 Hz, Logistic, 2.2 rangeSynth-like, synthetic life forms, artificial biology12s

Evolutionary Processes

PresetParametersCharacterDuration
Slow Evolution20 BP, 100 Hz, Gaussian, 1.2 rangeGradual transformation, ambient, meditative30s
Chaotic Bursts8 BP, 200 Hz, Cauchy, 4.0 rangeEruptive, unpredictable, dramatic mutations8s

Parameter Reference

ParameterTypeRangeDescription
Presetoption1-9Built-in configurations or Custom
Duration_spositive0.1-300Output duration in seconds
Sample_rate_Hzinteger8000-192000Audio sample rate (typically 44100)
Number_of_breakpointsinteger2-100Complexity of waveform (typically 8-20)
Base_frequency_Hzpositive1-5000Starting fundamental frequency
Frequency_rangereal1.0-10.0Multiplier for frequency variation
Amplitude_stepreal0.01-1.0Size of amplitude mutations (typically 0.05-0.3)
Duration_stepreal0.01-1.0Size of duration mutations (typically 0.05-0.3)
Distribution_typeoption1-4Uniform, Cauchy, Gaussian, Logistic
Amplitude_barrierreal0.1-1.0Maximum amplitude (typically 0.8-0.95)
Min_frequency_Hzreal1-1000Lower frequency limit (typically 20-100)
Max_frequency_Hzreal100-20000Upper frequency limit (typically 1000-5000)
Spatial_modeoption1-3Mono, Stereo Dual, Rotating
Normalize_outputboolean0/1Scale peak to 0.9 (prevents clipping)
Draw_visualizationboolean0/1Create visual display of waveform/spectrum
Play_resultboolean0/1Auto-play after synthesis

Applications

Experimental Music Composition

Use case: Generate unique sonic materials for electroacoustic composition

Techniques:

Sound Design for Media

Use case: Create evolving textures for film, games, installations

Techniques:

Generative Art & Installation

Use case: Sound for generative visual art or interactive installations

Techniques:

Academic Research & Teaching

Use case: Study stochastic processes and Xenakis's theories

Techniques:

Practical Workflow Examples

🎬 Sci-Fi Film Atmosphere

Goal: Create evolving background for space scene

Settings:

  • Preset: Electronic Organisms
  • Duration: 60 seconds
  • Spatial: Rotating stereo
  • Adjust: Lower amplitude_step to 0.08 for slower evolution
  • Adjust: Set frequency barriers to 80-1200 Hz

Result: Slowly evolving synthetic ecosystem sound

Post-process: Add reverb, layer with other sounds

🎵 Experimental Music Segment

Goal: Create 2-minute stochastic composition section

Settings:

  • Preset: GENDY3 Tribute
  • Duration: 120 seconds
  • Spatial: Stereo Dual
  • Adjust: Increase breakpoints to 16 for more complexity
  • Adjust: Set Cauchy distribution for dramatic changes

Result: Authentic Xenakis-style stochastic music

Composition: Extract interesting sections, layer, process further

🔬 Academic Study: Distribution Effects

Goal: Compare different probability distributions

Method:

  1. Create 4 versions with same parameters except distribution
  2. Duration: 10 seconds each
  3. Record generation count and spectral centroid over time
  4. Listen for perceptual differences

Findings: Cauchy produces most dramatic changes, Uniform most predictable, Gaussian most "natural"

Advanced Techniques

Parameter automation via scripting:
  • Gradual evolution: Script that slowly changes amplitude_step over time
  • Sectional form: Different presets for different sections of a piece
  • Responsive synthesis: Modify parameters based on analysis of other sounds
  • Multi-voice counterpoint: Generate multiple independent voices and combine
Creative parameter combinations:
  • Low frequency + many breakpoints: Complex subharmonic structures
  • High frequency + few breakpoints: Buzzy, insect-like textures
  • Large steps + tight barriers: Chaotic but constrained evolution
  • Small steps + no barriers: Slow drift into new territories
  • Extreme frequency range (20-5000 Hz): Full-spectrum exploration

Troubleshooting Common Issues

Problem: Synthesis very slow
Causes: Long duration + many breakpoints + high sample rate
Solutions: Reduce duration, reduce breakpoints, use lower sample rate, be patient
Problem: Output too static/boring
Causes: Step sizes too small, barriers too tight, uniform distribution
Solutions: Increase amplitude_step/duration_step, use Cauchy distribution, loosen barriers
Problem: Output too chaotic/noisy
Causes: Step sizes too large, too many breakpoints, frequency too high
Solutions: Decrease step sizes, reduce breakpoints, lower base frequency
Problem: Frequency drifts out of audible range
Causes: Insufficient barriers, large duration_step
Solutions: Set appropriate min/max frequency barriers, reduce duration_step
Problem: Visualization errors or missing
Causes: Praat drawing issues, very short durations
Solutions: Ensure Praat Picture window is open, use longer durations for better visualization

Performance Optimization

FOR SPEED: • Reduce number_of_breakpoints (most significant factor) • Reduce duration • Lower sample_rate_Hz • Use fewer breakpoints (8-12 is optimal) FOR COMPLEXITY: • Increase number_of_breakpoints (12-20) • Use Cauchy distribution • Increase step sizes (0.2-0.3) • Use stereo dual mode for two independent evolutions FOR MUSICAL RESULTS: • Set frequency barriers to musical range (e.g., 80-800 Hz) • Use moderate step sizes (0.1-0.2) • Gaussian or Logistic distribution for natural evolution • 30+ second durations to hear evolution CONTROL RATE NOTES: • Auto-adjusted based on frequency × breakpoints • Minimum 8000 Hz ensures waveform definition • Maximum 22050 Hz prevents excessive computation • Actual audio rate comes from resampling step

Historical & Theoretical Context

Iannis Xenakis: Architect of Stochastic Music

🏛️ From Architecture to Music

Background: Greek-French composer, architect, engineer (1922-2001). Worked with Le Corbusier, survived WWII, studied mathematics and music.

Key works: Metastasis (1955), Pithoprakta (1956), ST/48 (1962), GENDY3 (1991).

Theoretical contributions: Formalized Music (1963) — first comprehensive theory of stochastic music.

GENDY3 significance: One of first computer implementations of his stochastic theories for sound synthesis (1991, at CEMAMu).

Stochastic Music Theory

KEY CONCEPTS: 1. PROBABILITY DISTRIBUTIONS: Xenakis used: Uniform, Exponential, Cauchy, Gaussian Each creates different musical character Cauchy favored for "dynamic stochastic" (GENDY) 2. MARKOV CHAINS: Next state depends only on current state Implemented in GENDYN as: next amplitude depends on current amplitude + random step 3. BROWNIAN MOTION: Random walk of sound particles In GENDYN: amplitudes/durations undergo random walks with barriers 4. GAME THEORY: Xenakis applied min-max strategies to composition In GENDYN: barriers implement "rules of the game" MATHEMATICAL FOUNDATIONS: Xenakis's formula for sound mass density: N(t) = ∫₀ᵗ n(u) du where n(u) = number of sounds at time u GENDYN extends this to waveform level: Each breakpoint represents a "sound particle" Evolution follows stochastic differential equations

GENDY3 vs This Implementation

AspectOriginal GENDY3 (Xenakis)This Praat Implementation
PlatformCustom software at CEMAMuPraat scripting language
ParametersMore extensive stochastic controlsSimplified for usability
DistributionsCauchy primarily4 distributions including Cauchy
OutputMonophonicMono, stereo, rotating options
VisualizationSeparate graphical outputIntegrated in Praat Picture
AccessibilityResearch institution onlyFreely available Praat plugin
PhilosophyPure stochastic explorationBalanced: stochastic + musical usability

Related Xenakis Techniques

OTHER XENAKIS METHODS IMPLEMENTABLE IN PRAAT: 1. SCREENING (Dynamic Stochastic Synthesis): Similar to GENDYN but with more parameters Could be implemented as extension 2. GRANULAR SYNTHESIS: Xenakis pioneered with Analogique B (1959) Praat has built-in granular capabilities 3. MARKOV CHAIN COMPOSITION: Implementable via Praat scripting Transition probabilities between sounds/notes 4. SIEVE THEORY: Mathematical filtering of pitch sets Implementable for scale/mode generation 5. ARBOrescences: Tree-like formal structures Could guide parameter evolution in GENDYN THIS IMPLEMENTATION AS GATEWAY: GENDYN introduces Xenakis's concepts accessibly Foundation for exploring more advanced stochastic methods Bridge between mathematical theory and musical practice

Further Reading & Resources

Primary sources:

  • Xenakis, I. (1963). Formalized Music: Thought and Mathematics in Composition. Indiana University Press.
  • Xenakis, I. (1992). "GENDY3: Dynamic Stochastic Synthesis." Proceedings of the International Computer Music Conference.

Secondary sources:

  • Harley, J. (2004). Xenakis: His Life in Music. Routledge.
  • Solomos, M. (2013). From Music to Sound: The Emergence of Sound in 20th-Century Music. Routledge.
  • di Scipio, A. (1998). "Compositional Models in Xenakis's Electroacoustic Music." Perspectives of New Music.

Online resources: