Self-Oscillating FDN Synthesizer — Nonlinear Feedback Network Synthesis
Turn a feedback delay network into an autonomous sound generator. Eight coupled delay lines move from decay through near-critical resonance into bounded self-oscillation, with nonlinear shaping, evolving feedback conditions, and spatial output derived directly from the network state.
What this does
Self-Oscillating FDN Synthesizer is a pure-Praat nonlinear feedback delay network designed as a synthesizer rather than a conventional reverberator. Eight delay lines are coupled through an energy-preserving feedback matrix, filtered, DC-blocked, passed through a bounded nonlinearity, and written back into the network. A short excitation starts the system; after that, the sound is generated by the feedback dynamics themselves.
Key Features:
- Pure Praat implementation — no Python, external executable, plugin, cloud service, or DSP library.
- Eight-line nonlinear FDN — normalised Hadamard feedback by default, with Householder and decoupled reference modes.
- Physically meaningful instability control — the user control is mapped to a growth rate in dB per second, with per-delay feedback radii derived from each delay length.
- Bounded nonlinear feedback — tanh, softsign, cubic soft clip, or harder saturation, with optional asymmetry.
- Evolving dynamics — separate start/end values for instability, drive, and damping, plus optional sinusoidal growth-rate drift.
- Prime delay design — delay lengths are distributed geometrically, perturbed by irregularity, then snapped to distinct prime sample lengths.
- Five excitation modes — impulse, noise burst, sparse impulses, initial random state, or bipolar pulse.
- Three spatial modes — Orthogonal Field, state-driven Distributed Network, and Orbiting Network.
- Stereo, quad, or 8-channel output — including a full 8-channel ring layout.
- 20 supplied presets + Custom — five reference regimes and fifteen experimental synthesis designs.
- Explanatory Praat Picture visualisation — spectrogram, network energy, measured spatial map, growth curve, early/late state-space plots, and a technical summary.
Quick start
- Run
Self_Oscillating_FDN_Synthesizer.praat. No input Sound is required. - For a first run, choose Self-Oscillating, the default preset.
- Keep Duration = 8 s, Sample rate = 44100 Hz, Output layout = Stereo, and Normalization = Peak.
- Enable Draw visualisation to see how the network evolves after the excitation ends.
- Try Damped Resonator, Critical Network, and Strong Nonlinear to hear the main dynamical regimes.
- Then explore the experimental presets, especially Metallic Organism, Slow Attractor, Breathing Metal, Ignition, and Chaotic Edge.
- Enable Show parameters to expose the network, excitation, nonlinear, spatial, and drift controls behind the chosen preset.
Core concept
The synthesis loop combines delayed state, damping, DC blocking, matrix coupling, and bounded nonlinear feedback. Each delay line has its own delay length and its own damping/DC state, but all eight lines interact through the feedback matrix.
The default feedback matrix is a normalised 8 × 8 Sylvester-Hadamard matrix. In the ideal linear case it preserves energy while redistributing it among the lines. The nonlinearity then bounds growth when the network is operated above the critical region.
20 Presets + Custom
Reference regimes
Damped Resonator
Clearly below unity: a long but decisively decaying coupled resonance. Uses a short noise burst and linear drive settings so the network behavior is easy to read.
Critical Network
Extremely close to the critical region, with very slow energy loss and minimal nonlinear intervention.
Sustained FDN
Approximately unity behavior with gentle saturation and slight asymmetry, designed for long-lived resonance.
Self-Oscillating
Slightly supercritical feedback with moderate nonlinear bounding. This is the default preset and the clearest starting point for autonomous FDN synthesis.
Strong Nonlinear
Higher growth, stronger drive, harder saturation, and increased asymmetry for a more forceful nonlinear regime.
Experimental presets
Metallic Organism
Short irregular delays, high feedback, bright damping, and a distributed state-driven image.
Glass Swarm
Very short distributed delays, wide space, sparse excitation, and light softsign saturation.
Slow Attractor
Longer delays, low drive, darker damping, and an orbiting field that develops slowly around the critical region.
Rusted Machine
Highly irregular delay distribution, dark damping, strong saturation, asymmetry, and a Householder feedback matrix.
Digital Insects
Extremely short delays, sparse random excitation, high instability, and dense high-frequency activity.
Frozen Resonance
Near-critical behavior with very low damping and minimal nonlinear drive.
Fractured Bell
Medium irregular delays, a bipolar excitation, moderate nonlinearity, and an overall decaying regime.
Breathing Metal
A metal-like network whose growth rate drifts slowly while its spatial field orbits at a gentle rate.
Unstable Choir
Longer, more closely grouped delays, gentle saturation, darker damping, and slow orbiting spatial motion.
Chaotic Edge
A deliberately complex nonlinear edge regime with strong drive and asymmetry. The name is artistic; the script does not claim mathematically proven chaos.
Collapse and Recover
Begins supercritical and gradually moves into the stable region while drive falls and damping increases.
Ignition
Begins below critical and slowly crosses into self-oscillation as drive rises and damping opens.
Feedback Storm
High nonlinear drive, strong irregularity, aggressive growth, and bounded harder saturation.
Microstructure
Very short delays and low damping create dense, bright, high-frequency nonlinear texture.
Deep Network
Long delays create low, slowly interacting resonances and a more spacious temporal structure.
Custom
Uses the default starting values and automatically opens the parameter dialogs for full manual control.
Controls
Main dialog
| Control | Default | Function |
|---|---|---|
| Preset | Self-Oscillating | Five reference regimes, fifteen experimental presets, or Custom. |
| Duration | 8 s | Rendered duration. Limited internally to 120 seconds. |
| Sample rate | 44100 Hz | Allowed range: 8000–192000 Hz. |
| Random seed | 1 | Controls reproducible stochastic excitation. |
| Output layout | Stereo | Stereo, Quad (FL FR RL RR), or 8-channel ring. |
| Normalization | Peak | Peak, Resonance (RMS of the body), or None. |
| Output peak | -1 dBFS | Peak ceiling used by Peak and Resonance normalisation. |
| Ending | Short fade | Hard stop, 20 ms fade, or fade over 10% of the duration. |
| Show parameters | Off | Opens the detailed network and advanced dialogs after applying the preset. |
| Draw visualisation | On | Creates the multi-panel Praat Picture explanation. |
| Play result | On | Plays the generated Sound after synthesis. |
Network parameters
| Parameter | Range / role |
|---|---|
| Base delay | Defines the shortest nominal delay before irregularity and prime snapping. |
| Delay spread | 0–1000%. Expands the geometric range between the shortest and longest delay. |
| Delay irregularity | 0–1. Perturbs the geometric delay distribution before selecting distinct prime lengths. |
| Instability start / end | -1…+1. Controls the start and end growth rates with fine resolution around the critical point. |
| Drive start / end | 0.1–20. Controls the nonlinear operating range while preserving unit small-signal gain. |
| Damping start / end | 0–1. Maps logarithmically from a bright high cutoff toward approximately 150 Hz. |
| Stereo spread | 0–100%. Contracts or expands the spatial projection; in Orbiting mode it defines the arc width. |
Excitation & advanced parameters
| Parameter | Options / role |
|---|---|
| Excitation type | Single impulse / Short noise burst / Sparse random impulses / Initial random state / Bipolar pulse. |
| Excitation amount | 0–2. Scales the initial energy supplied to the network. |
| Excitation duration | Used by time-extended excitation modes. |
| Nonlinearity | Soft saturation (tanh) / Softsign / Cubic soft clip / Harder saturation. |
| Asymmetry | 0–0.6. Introduces nonlinear bias, even harmonics, and richer sustained dynamics; the effective internal bias is safety-capped when required. |
| Feedback matrix | Hadamard 8×8 / Householder 8×8 / Decoupled identity reference. |
| Spatial mode | Orthogonal Field / Distributed Network / Orbiting Network. |
| Spatial motion | 0–100%. Orbiting swing amplitude. |
| Spatial rate | 0.005–1 Hz. Orbiting swing rate. |
| Drift depth | 0–30 dB/s. Adds slow sinusoidal modulation to the network growth rate. |
| Drift rate | Frequency of the growth-rate drift. |
Instability & growth rate
The user-facing Instability parameter is not used as a single raw feedback multiplier. It is mapped cubically to a growth rate in dB per second:
The cubic mapping gives much finer control around zero, where very small changes can move the network between decay, sustained resonance, and self-oscillation.
Each delay line receives its own per-pass feedback radius according to its delay length:
This keeps the growth or decay rate consistent per second across delay lines of different lengths. A single shared per-pass gain would make short and long delays grow at radically different rates.
| Reported regime | Growth rate | Interpretation |
|---|---|---|
| Dissipative | < -3 dB/s | Energy clearly decays. |
| Near-critical | -3 to -0.3 dB/s | Very slow decay and long-lived coupled resonance. |
| Sustained | -0.3 to +0.3 dB/s | Approximately unity behavior. |
| Self-oscillating | +0.3 to +15 dB/s | Small signals grow until bounded by the nonlinear feedback function. |
| Strongly nonlinear | > +15 dB/s | Rapid growth drives the network deeply into nonlinear saturation. |
Nonlinearity & damping
The nonlinear stage is designed so its small-signal gain remains approximately unity. This separates the primary growth/decay control from the character of the saturation:
Soft saturation (tanh)
Smooth symmetric saturation and the default nonlinear mode.
Softsign
A softer rational saturation curve with a different approach to the bounds.
Cubic soft clip
A bounded cubic transfer based on a clipped -1…+1 input domain.
Harder saturation
A stronger bounded curve used by more aggressive presets such as Strong Nonlinear and Feedback Storm.
Asymmetry shifts the nonlinear operating point. At zero asymmetry the sustained behavior is close to scale-invariant with respect to Drive; non-zero asymmetry breaks that invariance, introduces even harmonics, and can substantially change the long-term spectral state.
Damping is a separate one-pole low-pass state for every delay line. The 0–1 control maps logarithmically from a high cutoff near 20 kHz toward 150 Hz, capped appropriately by the current Nyquist frequency.
Excitation
Excitation only starts the network. It is not a continuous synthesis source.
| Mode | Behavior |
|---|---|
| Single impulse | One impulse enters all eight lines with alternating polarity. |
| Short noise burst | A windowed Gaussian-noise burst excites a broad set of network modes. Used by the main reference presets. |
| Sparse random impulses | Low-density random impulses are distributed across the eight lines during the requested excitation interval. |
| Initial random state | The delay-line history is seeded directly; there is no explicit input excitation afterward. |
| Bipolar pulse | A short positive/negative pulse with alternating line polarity. |
Spatial output
The spatial layer is generated from the eight FDN states themselves. No reverb or post-hoc spatial effect is required.
Orthogonal Field
The stereo/quad channels use different zero-mean sign projections of the eight states. At 8 channels, each delay line can feed its corresponding speaker directly. Spread contracts the field toward the centre.
Distributed Network
The eight delay states occupy fixed positions in the order 1–5–3–7–2–6–4–8, avoiding a simple mapping from delay length to spatial position. Nothing is explicitly panned over time: movement is created by energy moving between the network states.
Orbiting Network
The distributed nodes occupy an arc whose width is set by Spread. The whole arc swings slowly according to Spatial motion and Spatial rate, adding controlled external motion to the internal state-driven field.
Output layouts
| Layout | Speaker geometry |
|---|---|
| Stereo | Left -30°, Right +30°. |
| Quad | Front Left -45°, Front Right +45°, Rear Left -135°, Rear Right +135°. |
| 8-channel ring | Eight speakers spaced by 45°, beginning at -22.5°. |
Normalisation & ending
Version 1.1 applies fades before final normalisation. The processing order is:
| Mode | Behavior |
|---|---|
| Peak | Scales the rendered Sound to the requested Output peak, with an internal ceiling no higher than 0.999. |
| Resonance (RMS of the body) | Applies an 8 ms fade-in, targets approximately -18 dBFS RMS over the body-analysis window, and reduces the gain when needed to respect the requested peak ceiling. |
| None | Leaves the raw rendered level unchanged and reports when the output exceeds full scale. |
The supplied Damped Resonator and Critical Network use a short noise burst rather than a single impulse. This avoids a needle-like initial transient dominating peak normalisation while leaving the resonant body perceptually weak.
Ending can be Hard stop, a 20 ms Short fade, or a Longer fade covering 10% of the rendered duration.
Visualisation
When Draw visualisation is enabled, the tool creates a Praat Picture figure intended to explain what the network actually did rather than merely decorate the result.
1 — Output spectrogram
Shows the generated spectral evolution. A red dotted line marks the end of excitation; everything later is feedback activity.
2 — Network energy
RMS energy of all eight delay lines through time over an 80 dB display range.
3 — Spatial map
A frequency-resolved map measured from the actual output channels. Blue indicates leftward energy, red rightward energy, grey the centre, and pale regions low energy.
4 — Growth rate
Plots the requested dB/s growth curve through time, with the critical line and shaded dissipative / self-oscillating regions.
5 — State space
Compares an early transient phase portrait with the final second, revealing how the coupled state evolves toward decay, sustained motion, or nonlinear attractor-like structure.
Summary strip
Reports prime delays, feedback matrix, growth rates and per-pass radii, drive, asymmetry, nonlinearity, damping, excitation, spatial mode, normalisation, level change, maximum internal state, exact block count, and synthesis time.
Technical behavior
- Creates eight delay-line state channels internally and never requires an input Sound.
- Delay lengths are generated from Base delay, geometric Spread, and a deterministic golden-ratio-derived irregularity offset, then snapped to distinct prime sample lengths.
- The default feedback matrix is a normalised 8 × 8 Sylvester-Hadamard matrix. Householder and identity reference modes are also available.
- Each line has an independent one-pole damping state and DC blocker before matrix mixing.
- Instability is converted to a growth rate with
ρ = 60u³dB/s; each line then receives a delay-dependent per-pass radius. - Start/end Instability, Drive, and Damping values use raised-cosine interpolation across the rendered duration.
- Optional Drift adds sinusoidal modulation directly to the growth rate in dB/s.
- The nonlinear stage is explicitly bounded and contains an emergency internal safety clamp; the report states if that clamp was reached.
- Asymmetry is internally capped when Drive × Asymmetry would move the chosen saturator too far into a near-flat region.
- The synthesis loop is evaluated in exact blocks of up to the shortest delay length. Because no newly written value can be read before that delay has elapsed, block processing remains equivalent to the required sample recursion while avoiding a slow command-per-sample script.
- The script reports the last-quarter vs first-quarter RMS change as a practical level-evolution diagnostic.
- Output is generated directly as a multichannel Praat Sound and remains inside Praat.
Signal path
Requirements & installation
| Component | Requirement |
|---|---|
| Praat | Praat 6.3+; the script uses colon-form command syntax. |
| Python | Not required. |
| External libraries | None. |
| Input Sound | Not required; this is a standalone synthesizer. |
| Sample rate | 8000–192000 Hz. |
| Maximum duration | 120 seconds per render. |
Limitations
- Offline only: the network is rendered as a Sound object rather than performed in real time.
- Eight-line architecture: the synthesis core is fixed at eight feedback delay lines.
- Very short delays cost more: the exact block method uses more processing blocks when the shortest delay is extremely small.
- Preset names are artistic descriptions: a name such as Chaotic Edge does not constitute a mathematical proof of chaos.
- High feedback is intentionally nonlinear: results can change strongly with excitation, asymmetry, drive, and damping, especially near regime boundaries.
- 8-channel monitoring depends on the playback environment: Praat creates the multichannel Sound, but audible routing depends on the user's audio system.
Outputs
The script creates one new multichannel Sound named from the preset:
FDN_<PresetName>
Examples:
FDN_SelfOscillating FDN_MetallicOrganism FDN_SlowAttractor
The result contains 2, 4, or 8 channels according to Output layout. The Info window reports the actual prime delay lengths, growth regime, per-pass feedback radii, nonlinear settings, excitation, spatial mode, normalisation result, numerical safety state, and render statistics.
Applications
Critical resonance
Use case: create resonant textures that sit between obvious decay and autonomous oscillation.
Starting point: Critical Network or Frozen Resonance.
Autonomous nonlinear synthesis
Use case: generate sustained sound whose waveform and spectrum arise from coupled feedback rather than predefined oscillators.
Starting point: Self-Oscillating or Strong Nonlinear.
State-driven spatial composition
Use case: let the network's changing internal energy distribution generate spatial movement without a panning LFO.
Starting point: Metallic Organism with Distributed Network.
Slow dynamical transitions
Use case: compose a trajectory through stability regimes rather than holding one fixed feedback condition.
Starting point: Ignition or Collapse and Recover.
Orbiting nonlinear fields
Use case: combine internal state-driven movement with a slow global spatial swing.
Starting point: Slow Attractor, Breathing Metal, Unstable Choir, or Chaotic Edge.
Dense high-frequency structures
Use case: use sub-millisecond and very short delays as the basis for metallic, insect-like, or microstructural spectra.
Starting point: Glass Swarm, Digital Insects, or Microstructure.
Workflow: from reverberation logic to synthesis
Begin with Damped Resonator and listen to the familiar decay of a feedback network. Move to Critical Network and Sustained FDN, then cross into Self-Oscillating. Finally compare the experimental presets. The central compositional transition is:
excitation → coupled resonance → near-critical persistence → nonlinear self-oscillation → evolving spatial texture