Grisey — Spectral Becoming Engine — User Guide
Spectral synthesis engine inspired by Gérard Grisey's concept of "spectral becoming" (devenir spectral). Generates slowly evolving additive synthesis sounds that transform from fused harmonic timbres into progressively inharmonic, spectrally diffused textures.
What this does
This script implements a Spectral Becoming Engine — an additive synthesis system that models the continuous transformation from harmonic to inharmonic spectra, a central concept in the spectral music of Gérard Grisey (1946-1998). The engine generates slowly evolving sounds where individual partials undergo frequency chirps, spectral energy redistribution, and micro-detuning, creating the illusion of a single sound "becoming" something else over time.
🎼 What is Spectral Becoming?
Gérard Grisey, a founder of the spectral school of composition, explored the idea that sound is not a static object but a process in time — a "becoming." His works like Partiels (1975) and the cycle Les Espaces Acoustiques (1974-85) feature sounds that gradually transform:
- Harmonic fusion: Initially, partials are locked to harmonic ratios, creating a fused, instrumental timbre
- Spectral fission: Over time, partials drift apart, becoming inharmonic and eventually noise-like
- Beating patterns: Micro-detuning creates audible amplitude fluctuations (beats)
- Threshold perception: The ear hears the transformation not as a succession of timbres but as a single evolving entity
This engine implements these principles through phase-correct frequency chirps, time-varying amplitude envelopes, and controlled inharmonicity.
Key Features:
- 5 Preset Strategies — Partiels, Gondwana, Vortex, Meditation, Prologue, plus Custom
- Phase-Correct Frequency Chirps — Each partial follows an analytical frequency trajectory with exact phase integration
- 3 Temporal Curves — Linear, Exponential (early change), Logarithmic (late change)
- Inharmonicity Evolution — f = f0 × n^(1+inharm) at end state
- Micro-Detuning — Gaussian detuning per partial, scaled by partial number
- Spectral Brightness Evolution — Amplitude rolloff changes from 1/n^α_start to 1/n^α_end
- Spectral Breathing — Slow global amplitude modulation (0.06-0.25 Hz)
- Cosmetic Fades — Smooth cosine fade in/out
- Visualization — Spectrogram with overlaid partial trajectories + waveform zooms
Technical Implementation: (1) Partial Parameters: For each harmonic n, compute start frequency f0×n, end frequency f0×n^(1+inharm) with detuning, start amplitude 1/n^α_start, end amplitude 1/n^α_end. (2) Additive Synthesis: Create each partial using phase-correct formulas based on curve type, accumulate into buffer. (3) Global Processing: Apply cosine fade in/out, add spectral breathing AM. (4) Visualization: Spectrogram with overlaid frequency trajectories, waveform zooms of start and end states.
Quick start
- In Praat, ensure no objects are selected (script generates new sound).
- Run script… → select
Grisey_Spectral_Becoming_Engine.praat. - Choose Preset (2-6 for specific strategies, 1 for custom).
- Set fundamental frequency, number of partials, and duration.
- Adjust inharmonicity factor and micro-detuning amount.
- Select temporal curve shape.
- Enable Show_visualization for spectrogram with partial trajectories.
- Click OK — engine synthesizes, applies envelope/breathing, creates "Grisey_PresetName_f0Hz" sound.
Spectral Becoming Theory
The Partial Evolution Equation
Temporal Curve Functions
📈 The Three Curves
Linear (u): c(u) = u
Even distribution of change throughout duration.
Exponential (early change): c(u) = (e^(3u) - 1) / (e^3 - 1)
Most change occurs in the first half; later partials stabilize.
Logarithmic (late change): c(u) = ln(1 + 9u) / ln(10)
Change accelerates toward the end; initial spectrum remains stable longer.
Phase-correct integration: For each curve, we derive the exact integral ∫f(t)dt to ensure correct instantaneous phase, preventing frequency glitches or phase discontinuities.
Inharmonicity Formula
🎵 From Harmonic to Inharmonic
Natural harmonic series: f_n = f0 × n
Inharmonic series: f_n = f0 × n^(1 + β), where β = inharmonicity_factor
| β | Effect | Example |
|---|---|---|
| 0.00-0.02 | Subtle inharmonicity, beating | Meditation preset |
| 0.03-0.06 | Moderate inharmonicity, bell-like | Partiels, Prologue |
| 0.07-0.12 | Strong inharmonicity, metallic | Gondwana |
| 0.15-0.25 | Extreme inharmonicity, spectral dissolution | Vortex |
The exponent (1+β) means higher partials are stretched more than lower ones — a realistic model for stiff strings, bells, and gongs.
Micro-Detuning and Beating
Spectral Brightness Evolution
Spectral Breathing
Preset Strategies
Preset 2: Partiels (trombone E1, slow bloom)
🎺 Trombone E1 — 41.2 Hz
Partials: 24 | Duration: 30 s
Inharmonicity: 0.04 | Detuning: 1.5 Hz
Curve: Logarithmic (late change)
Breathing: 0.12 Hz, depth 0.10
Character: Slow bloom from low brass-like fusion to shimmering inharmonic texture. Inspired by the opening of Partiels (1975).
Preset 3: Gondwana (deep drift)
🌍 Geological Time-Scale
Fundamental: 32.7 Hz (C1) | Partials: 32 | Duration: 45 s
Inharmonicity: 0.08 | Detuning: 3.0 Hz
Curve: Logarithmic
Breathing: 0.08 Hz, depth 0.15
Character: Very slow, deep transformation — massive low-end evolving into complex inharmonic cloud.
Preset 4: Vortex (fast dissolution)
🌀 Rapid Spectral Fission
Fundamental: 65.4 Hz (C2) | Partials: 20 | Duration: 15 s
Inharmonicity: 0.20 | Detuning: 5.0 Hz
Curve: Exponential (early change)
Breathing: 0.25 Hz, depth 0.08
Character: Rapid dissolution from harmonic to chaotic — vortex of sound.
Preset 5: Meditation (static shimmer)
🧘 Near-Harmonic Drift
Fundamental: 55.0 Hz (A1) | Partials: 16 | Duration: 60 s
Inharmonicity: 0.01 | Detuning: 0.8 Hz
Curve: Linear
Breathing: 0.06 Hz, depth 0.20
Character: Minimal inharmonicity, subtle beating — meditative, shimmering texture.
Preset 6: Prologue (voice-like)
🗣️ Mid-Range Formant Region
Fundamental: 110.0 Hz (A2) | Partials: 18 | Duration: 25 s
Inharmonicity: 0.06 | Detuning: 2.5 Hz
Curve: Linear
Breathing: 0.18 Hz, depth 0.14
Character: Voice-like range, moderate transformation — prologue to a spectral journey.
Parameters & Controls
Spectral Source
| Parameter | Default | Description |
|---|---|---|
| Fundamental_Hz | 41.2 | Base frequency of harmonic series (Hz) |
| Number_of_partials | 24 | Number of harmonics to synthesize |
| Duration_s | 30 | Total duration in seconds |
Transformation
| Parameter | Default | Description |
|---|---|---|
| Inharmonicity_factor | 0.05 | Exponent for inharmonic stretching (0 = harmonic) |
| Micro_detuning_Hz | 2.0 | Standard deviation of frequency detuning (scaled by partial) |
Temporal Shape
| Parameter | Default | Description |
|---|---|---|
| Temporal_curve | Logarithmic | Shape of evolution: Linear, Exponential, Logarithmic |
Output
| Parameter | Default | Description |
|---|---|---|
| Sample_rate | 44100 | Output sample rate (Hz) |
| Show_visualization | 1 | Generate spectrogram with partial trajectories |
Fixed Parameters (internal)
| Parameter | Default | Description |
|---|---|---|
| breathRate | 0.12-0.25 | Spectral breathing frequency (Hz) |
| breathDepth | 0.08-0.20 | Breathing modulation depth |
| fadeInFraction | 0.02-0.08 | Fraction of duration for fade in |
| fadeOutFraction | 0.08-0.15 | Fraction of duration for fade out |
| alphaStart | 1.0 | Spectral rolloff at start (1/n^α) |
| alphaEnd | max(0.2, 1.0 - inharm×1.5) | Rolloff at end |
Visualization & Analysis
3-Panel Display
Reading the Partial Trajectories
- Warm colors (yellow-orange): Low partials (fundamental, 2nd, 3rd) — they change less in frequency but carry most energy
- Mid colors (green-teal): Middle partials — where most spectral evolution occurs
- Cool colors (cyan-blue): High partials — they drift the most, often crossing and becoming inharmonic
- Slope: Steeper lines = faster frequency change; shallower = stable
- Curvature: Reflects the chosen temporal curve (linear = straight, exponential = early bend, logarithmic = late bend)
Comparing Start and End Waveforms
- Start waveform (blue): Regular, periodic pattern — reflects harmonic fusion, clear fundamental periodicity
- End waveform (orange): Irregular, complex pattern — reflects spectral dissolution, loss of periodicity
- Amplitude comparison: Both shown at same scale; end may have different peak structure due to beating
Applications
Compositional Material
Use case: Generating source material for electroacoustic compositions
Technique: Use different presets as building blocks; layer multiple outputs
Workflow:
- Generate Partiels preset (30s) as an opening gesture
- Generate Gondwana (45s) as a middle section
- Generate Vortex (15s) as a climax
- Layer, crossfade, or process further in DAW
Cross-Synthesis Source
Use case: Using the evolving spectrum as a filter envelope for other sounds
Technique: In Praat or other software, use the generated sound as:
- Spectral envelope: Apply LPC or cepstral analysis to extract time-varying spectral envelope, impose on another sound
- Vocoder carrier: Use as carrier in channel vocoder with speech/modulator
- Convolution source: Convolve with dry recordings to impart spectral evolution
Time-Stretching Exploration
Use case: Revealing micro-structures through extreme time-stretching
Technique: Use Praat's Manipulation or external tools to stretch the output by 10-100×
Result: The already slow evolution becomes geological — individual partial trajectories become audible as glissandi, beating patterns become separate events
Educational Demonstration
Use case: Teaching spectral music concepts to students
Technique: Enable visualization, compare presets, discuss relationship between parameters and sound
Learning outcomes:
- Understand harmonic vs. inharmonic spectra
- Hear beating patterns from micro-detuning
- See frequency trajectories in spectrogram
- Connect Grisey's theories to audible phenomena
Practical Workflow Examples
🎬 Film Score: Transformation Cue
Goal: Create a 45-second cue representing a character's psychological transformation
Settings:
- Preset: Gondwana (deep, slow drift)
- Customize: duration = 45s, inharm = 0.10 (more extreme), detuning = 4.0 Hz
- Curve: Exponential (early change for dramatic onset)
Result: Deep, rumbling low end gradually dissolves into complex, shimmering texture — perfect for transformation scenes
🎚️ Electronic Music: Buildup Riser
Goal: Create a 15-second riser effect for EDM drop
Settings:
- Preset: Vortex (fast dissolution)
- Fundamental: 110 Hz (higher for more energy)
- Inharm: 0.25 (extreme)
- Curve: Exponential
Result: Rapid transformation from harmonic tone to chaotic noise cloud — effective riser
🔬 Research: Perceptual Thresholds of Inharmonicity
Goal: Generate stimuli for psychoacoustic experiments on inharmonicity perception
Settings:
- Generate multiple versions with inharmonicity from 0.01 to 0.10 in steps of 0.01
- Keep all other parameters constant (Meditation preset)
- Present pairs (harmonic vs. inharmonic) to listeners
Result: Determine just-noticeable difference for inharmonicity in complex tones
Troubleshooting Common Issues
Cause: Partials exceeding Nyquist frequency are automatically skipped
Solution: Reduce number_of_partials, lower fundamental, or increase sample rate
Cause: Many partials × long duration × complex formulas
Solution: Reduce partials (16-20), reduce duration, use Linear curve (simplest formula)
Cause: Fade in/out too short or nonexistent
Solution: Increase fadeInFraction/fadeOutFraction in script (0.05-0.10)
Cause: Micro_detuning_Hz inappropriate for fundamental
Solution: Adjust detuning — as rule of thumb, keep < 5% of f0 for subtle beating, >10% for prominent beats
Cause: breathDepth > 0.25 or breathRate too high
Solution: Reduce depth (0.08-0.15), keep rate below 0.2 Hz
Advanced Techniques
In the script, modify the Formula sections for fade in/out and breathing to implement different shapes (e.g., exponential fade, Hanning window).
After synthesis, apply a formant filter (e.g., Filter (pass Hann band) around desired formant frequencies) to impose vocal tract-like resonances — creating a "sung" quality.
Generate multiple sounds with related fundamentals (e.g., perfect fifth apart) and mix them. The inharmonic evolution will create complex harmonic relationships over time.
Modify the start frequencies to use just intonation or equal temperament ratios instead of pure harmonics. Experiment with f0 × (n × ratio) for microtonal spectra.