Advanced Brownian Synthesis — User Guide

Layered stochastic synthesis driven by bounded Brownian / Ornstein–Uhlenbeck frequency trajectories, with reproducible randomness, harmonic and pulsed variants, and optional stereo spatial processing.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 0.5 reviewed (2026) License: MIT License
Contents:

Overview

Advanced Brownian Synthesis creates sound from several sinusoidal layers whose instantaneous frequencies move along stochastic trajectories. Each layer is updated at a 200 Hz control rate, the control trajectory is resampled to the audio sample rate, and phase is then integrated at audio rate before synthesis. This keeps the oscillator continuous while allowing the frequency path to wander.

The central control is a Brownian innovation with optional mean reversion. With drift disabled, frequency performs a bounded random walk. With drift enabled, the same stochastic motion is pulled toward a target frequency, giving a discrete Ornstein–Uhlenbeck-like process. Frequency boundaries are reflective rather than simple hard clips, reducing artificial dwelling at the limits.

No input Sound is required. The script is a generator. It creates a new mono or stereo Sound object according to the selected synthesis and spatial modes.

Quick start

  1. Run Advanced_Brownian_Synthesis.praat; no Sound selection is needed.
  2. Choose a preset, or leave Custom to use the values shown in the form.
  3. Set Duration_s, Base_frequency_Hz, and Number_of_layers.
  4. Use Step_size for the amount of stochastic motion and Drift_force for the strength of attraction toward each mode's target frequency.
  5. Set Random_seed to 0 for a new realization on every run, or to a positive integer for a reproducible trajectory.
  6. Choose Brownian Walk, Brownian Chaos, Brownian Harmonics, or Pulsed Brownian, then choose Mono, Stereo Wide, or Rotating output.

Brownian process

At each 200 Hz control update, the script applies the following discrete rule:

Δf = k(μ − f)Δt + σ√Δt · N(0,1)
f_next = f + Δf

Here f is the current layer frequency, μ is that layer's target, k is Drift_force, and Δt = 1/200 s. The implementation converts the user-facing Step_size into a rate-explicit diffusion coefficient so that, at the fixed 200 Hz control rate, the Gaussian innovation retains approximately the historical Step_size magnitude per control frame.

Boundaries

The synthesis range is 30 Hz to min(8000 Hz, 0.45 × sample_rate). The upper limit is therefore at most 90% of Nyquist. Ordinary boundary crossings are reflected back into the valid range; a final guard clamps only unusually large jumps that would cross more than one boundary in a single update.

From control trajectory to oscillator

Frequency and amplitude controls are generated at 200 Hz, resampled to the requested audio sample rate, and then frequency is integrated into phase sample by sample. The audio layer is amplitude(t) × sin(phase(t)). The layers are summed before fades and spatial processing.

Interpretation of Step_size: it is best understood musically as the approximate Gaussian frequency-step scale in Hz per 200 Hz control update, before drift, Chaos jumps, and boundary reflection. It is not a bandwidth, pitch range, or Hz-per-second sweep rate.

Synthesis modes

Brownian Walk Mean-reverting walk

Layer n starts at Base_frequency_Hz + (n−1) × Frequency_spread_Hz. With drift enabled, each layer is attracted back toward its own starting frequency. Layer amplitude is static apart from a slight layer-index taper.

Brownian Chaos Heavy-tail variant

Layers begin with the same spread rule as Brownian Walk, but the stochastic step grows with layer number. On approximately 10% of control updates the Brownian step is multiplied by 5. With drift enabled, all Chaos layers are attracted toward 2 × Base_frequency_Hz. Amplitude falls temporarily after larger frequency jumps through a stability term exp(−|step| / step_scale).

Brownian Harmonics Harmonic targets

Layer n begins at and is attracted toward n × Base_frequency_Hz. Frequency_spread_Hz is intentionally ignored in this mode. Higher partials receive smaller amplitudes, while each harmonic retains its own stochastic detuning around the ideal integer multiple.

Pulsed Brownian Stochastic + periodic

Frequency starts with the normal layer spread, while drift pulls all layers toward Base_frequency_Hz. Each layer also receives a periodic amplitude pulse. The pulse rate is 2 + 1.5 × layer_number Hz, and the envelope retains a 20% floor rather than closing to silence.

Presets

Presets replace the synthesis, motion, fade, and spatial values shown below. Sample_rate_Hz, Random_seed, Normalize_output, Draw_visualization, and Play_result remain independently controlled by the form.

PresetModeDurationBase / layers / spreadStep / driftFadeSpatial
Default WalkWalk10 s150 Hz / 4 / 100 Hz10 / 0.102 sMono
Tight KnotsWalk8 s200 Hz / 6 / 50 Hz5 / 0.201 sStereo Wide
Loose DriftWalk15 s100 Hz / 3 / 200 Hz20 / 0.053 sRotating
Chaotic SwarmChaos12 s180 Hz / 8 / 80 Hz15 / 0.152 sStereo Wide
Harmonic BellsHarmonics10 s220 Hz / 5 / spread ignored8 / 0.102 sMono
Deep DroneWalk20 s55 Hz / 3 / 20 Hz3 / 0.305 sRotating
Spectral ShimmerHarmonics12 s440 Hz / 6 / spread ignored25 / 0.082 sStereo Wide
Insect SwarmChaos8 s800 Hz / 10 / 400 Hz50 / 0.051 sStereo Wide
CustomUses the values currently shown in the form.

Spatial modes

ModeOutputProcessing
Mono1 channelThe summed synthesis output is retained directly.
Stereo Wide2 channelsCreates two copies of the mono synthesis and applies different Hann pass bands: the left emphasizes the lower spectrum, while the right removes the lowest region and extends higher. This is a static spectral widening method, not pan automation.
Rotating2 channelsApplies complementary equal-power gains driven by a 0.15 Hz sine trajectory. At the center position both channels receive √0.5 gain; the trajectory alternates smoothly toward the left and right extremes.
No binaural/HRTF mode is present in v0.5. The older documentation's Binaural and Filtered Brownian descriptions do not apply to this version.

Parameters

ParameterDefaultBehavior
Duration_s10 sGenerated Sound duration.
Sample_rate_Hz44100Output sample rate. Values below 8000 Hz are rejected.
Base_frequency_Hz150 HzPrimary reference frequency. Must be below the safe upper synthesis bound.
Number_of_layers4Number of voices; constrained to 1–16.
Frequency_spread_Hz100 HzInitial spacing between layers in Walk, Chaos, and Pulsed modes. Ignored by Harmonics. Negative values are allowed and reverse the direction of initial layer spacing.
Step_size10Stochastic frequency-step scale. Negative entries are converted to their absolute value.
Enable_driftYesEnables the mean-reverting term toward each mode's target.
Drift_force0.10Mean-reversion coefficient in s⁻¹. Negative entries are replaced by 0.
Random_seed00 creates a new unpredictable realization; a positive integer reproduces the stochastic trajectory. The script restores unpredictable RNG state afterward.
Fade_time_s2 sLinear fade-in and fade-out. Constrained to 0…half the duration.
Normalize_outputYesIf enabled, Scale peak: 0.9 is applied. This is true peak normalization: it can raise or lower gain. If disabled, no final safety ceiling is applied.
Draw_visualizationYesDraws the process/QC figure after synthesis.
Play_resultYesPlays the generated object after processing.

Visualization

The v0.5 figure is a process/QC view tied to the trajectories used by the synthesis rather than a decorative preview.

The Info window also reports if any initial layer frequencies had to be constrained to the safe synthesis range.

Output behavior

Compositional context

Brownian and stochastic processes have a substantial compositional history. Iannis Xenakis used Brownian motion as a model for continuously changing pitch trajectories in Mikka (1971), and stochastic procedures became central to his broader work on probability, formalization, and computer music. Later, Gendy3 (1991) applied stochastic procedures directly to computer-generated sound.

This script belongs to that wider lineage of constrained randomness as compositional material, but it is not an implementation of Xenakis's GENDY algorithm or a reconstruction of Mikka. Its specific design is a layered oscillator system whose frequency controls follow bounded Brownian / mean-reverting trajectories, with contemporary controls for reproducibility, harmonic organization, pulsing, and spatialization.

Why the distinction matters: the compositional reference is conceptual and historical. The actual DSP and parameter laws documented above are those implemented by this Praat script.