Effects
Audio effects and processing
Effects process audio in the signal chain.
Filters
Lowpass
Removes high frequencies:
|> lowpass(cutoff)
|> lowpass(cutoff, resonance)
|> lowpass(cutoff: 1000, resonance: 0.5)Highpass
Removes low frequencies:
|> highpass(cutoff)
|> highpass(cutoff: 500, resonance: 0.3)Bandpass
Passes frequencies around the cutoff and attenuates everything else:
|> bandpass(cutoff)
|> bandpass(cutoff: 1000, resonance: 0.8)Notch
Removes frequencies around the cutoff, passes everything else — the opposite of bandpass:
|> notch(cutoff)
|> notch(cutoff: 500, resonance: 0.5)Diode
4-pole diode ladder filter inspired by the TB-303. Warm, squelchy, and self-oscillates at high resonance:
|> diode(cutoff)
|> diode(cutoff: 800, resonance: 0.9)cutoff— Filter cutoff frequency in Hzresonance— Resonance amount (0–1.25). Values above ~0.9 produce self-oscillation
When used alongside acidenv, the acid envelope automatically uses the diode filter internally for an authentic 303 sound.
Reverb
Adds space and ambience:
|> reverb(size)
|> reverb(size: 0.8, mix: 0.5)size— Room size (0–1)mix— Wet/dry balance (0–1)
Convolution Reverb
High-quality impulse response reverb for realistic spaces:
|> convolve("hall")
|> convolve("plate", mix: 0.5)
|> convolve("cave", mix: env(0: 0.2, 4: 0.8))Built-in Impulse Responses
| Name | Description |
|---|---|
| hall | Concert hall (2.0s, bright) |
| plate | Plate reverb (1.5s, metallic) |
| chamber | Small chamber (0.8s, warm) |
| spring | Spring reverb (1.0s, vintage) |
| cave | Large cave (3.0s, dark) |
| space | Infinite space (4.0s, ethereal) |
Parameters
mix— Wet/dry balance (0–1), supports envelope automation
Delay
Echo effect:
|> delay(1/4) // Quarter note delay
|> delay(1/8) // Eighth note delay
|> delay(time: 1/4, feedback: 0.4) // With feedback
|> delay(500ms) // 500 milliseconds
|> delay(0.25s) // 0.25 secondstime— Delay time (beats:1/4,1b; or absolute:500ms,0.5s)feedback— Amount of feedback (0–1)
Distortion
Overdrive and saturation:
|> distortion(drive)
|> distortion(drive: 0.7, tone: 0.5)Clip
Hard clipper — chops the waveform at a threshold for harsh, digital distortion. Different character from the smooth saturation of distortion:
|> clip(0.5)
|> clip(threshold: 0.3)threshold— Clipping threshold (0–1, default 0.5). Lower values = more aggressive clipping
Chorus
Adds depth and width:
|> chorus(depth)
|> chorus(depth: 0.5, rate: 1.5, mix: 0.5)Phaser
Sweeping filter effect:
|> phaser(depth)
|> phaser(depth: 0.6, rate: 0.5, feedback: 0.7)Bitcrusher
Lo-fi digital degradation:
|> bitcrusher(bits)
|> bitcrusher(bits: 8, rate: 0.5)Compressor
Dynamic range compression:
|> compressor(threshold, ratio)
|> compressor(threshold: -20, ratio: 4, attack: 10, release: 100)Sidechain
Rhythmic ducking synced to tempo:
|> sidechain(amount: 0.8, rate: 4)Volume
Adjust output level:
|> volume(0.5) // 50% volume
|> volume(level: 0.7)level— Volume multiplier (0–1)
Trance Gate
Rhythmic volume chopping synced to tempo:
|> gate(1/16) // 16th note gate
|> gate(rate: 1/8) // Named parameter
|> gate(pattern: "x_x_xx__", rate: 1/16) // Pattern-based
|> gate(rate: 1/4, attack: 0.01, release: 0.05) // Smooth transitionsParameters
rate— Gate rate in beats (1/16, 1/8, etc.)pattern— Pattern string:x= open,_= closed (default: "x")attack— Gate open time in seconds (default: 0.001)release— Gate close time in seconds (default: 0.01)
Stutter
Glitch effect that rapidly repeats audio chunks:
|> stutter(1/16) // 16th note stutter
|> stutter(rate: 1/32, mix: 0.5) // Mix with original
|> stutter(rate: 1/8, repeats: 4) // Limit repeatsParameters
rate— Chunk size in beats (1/16, 1/32, etc.)mix— Wet/dry blend 0–1 (default: 1.0)repeats— Repeats before new capture (default: 0 = infinite)
Ring Modulation
Ring modulation multiplies the audio signal with a carrier oscillator, creating sum and difference frequencies (sidebands). Unlike distortion, ring mod produces inharmonic overtones—frequencies not related to the original pitch—giving it a distinctly metallic, robotic character.
|> ring(440) // 440 Hz carrier
|> ring(freq: 200, mix: 0.5) // Blend with original
|> ring(freq: lfo(rate: 1/4, min: 100, max: 500)) // Modulated carrierParameters
| Parameter | Description | Default |
|---|---|---|
freq | Carrier oscillator frequency in Hz. Lower values (50-200) add rumble; higher values (300-800) add metallic shimmer | 440 |
mix | Wet/dry blend. 0 = dry only, 1 = wet only, 0.3-0.5 typical for subtle effect | 1.0 |
Classic Ring Mod Sounds
// Industrial texture - low carrier for grinding rumble
play [E2pow] |> saw |> ring(freq: 80, mix: 0.5) |> distortion(0.6)
// Dalek/robot voice - mid carrier for metallic speech
play [C4 E4 G4] |> saw |> ring(freq: 300, mix: 0.7)
// Bell-like shimmer - high carrier blended subtly
play [C5 E5 G5] |> sine |> ring(freq: 600, mix: 0.3) |> reverb(0.6)
// Evolving texture - modulated carrier frequency
play [Am7] |> supersaw |> ring(freq: lfo(rate: 1/2, min: 100, max: 400), mix: 0.4)Acid Envelope
TB-303 style per-voice filter sweep. Each note triggers an exponential filter decay — the essential acid sound:
|> acidenv(cutoff: 200, sweep: 2000, decay: 0.15, resonance: 0.8)
|> acidenv(sweep: 3000, decay: 0.1, accent: 0.5)| Parameter | Description | Default |
|---|---|---|
cutoff | Base cutoff frequency where the filter settles (Hz) | 200 |
sweep | How far the filter sweeps up from the base (Hz) | 2000 |
decay | Envelope decay time in seconds | 0.15 |
resonance | Filter resonance (0–1) | 0.8 |
accent | Accent amount (0–1) — boosts volume and sweep range | 0.0 |
envMod | Envelope depth (0–1) | 1.0 |
Classic Acid Patterns
// Basic acid bassline
play [C2 C2 Eb2 C3] |> saw |> glide(80ms) |> acidenv(sweep: 3000, decay: 0.1)
// With diode filter for authentic 303 sound
play [C2 D2 Eb2 C2] |> saw |> diode(200, 0.85) |> acidenv(sweep: 3000, decay: 0.1)
// Accented acid — louder hits with extra sweep
play [C2 C2 Eb2 C3] |> saw |> acidenv(sweep: 2000, decay: 0.15, accent: 0.7)When a diode filter is in the same pipeline as acidenv, the acid envelope automatically uses the diode ladder filter internally, giving you the warm, squelchy 303 sound.
LFO Modulation
Automate any parameter with an LFO:
|> lowpass(lfo(rate: 1/4, min: 200, max: 2000)) // Quarter note LFO
|> lowpass(lfo(rate: 2hz, min: 200, max: 2000)) // 2 Hz LFOLFO rate supports both frequency (2hz) and beat-relative (1/4, 1b) values.
LFO waveforms: sine, triangle, square, saw, perlin
lfo(rate: 2hz, min: 0.2, max: 0.8, waveform: "triangle")Perlin Noise
Smooth, organic random modulation using Perlin noise. Use the perlin() shorthand for natural-sounding parameter drift:
|> lowpass(perlin(min: 400, max: 2000, speed: 0.5))
|> pan(perlin(min: -0.3, max: 0.3, speed: 0.2))| Parameter | Description | Default |
|---|---|---|
min | Minimum output value | 0.0 |
max | Maximum output value | 1.0 |
speed | Noise evolution speed in Hz | 1.0 |
seed | Random seed for reproducible patterns | 0 |
// Wandering filter — each voice gets different motion
play [C4 E4 G4] |> saw |> lowpass(perlin(min: 200, max: 3000, speed: 0.3))
// Subtle stereo drift
play [Am7] |> supersaw |> pan(perlin(min: -0.4, max: 0.4, speed: 0.15))Effect Chain Examples
// Lush pad with modulated filter
[C4 E4 G4 B4]
|> supersaw
|> lowpass(perlin(min: 500, max: 4000, speed: 0.3))
|> chorus(0.3)
|> reverb(size: 0.7, mix: 0.4)
|> delay(time: 0.375, feedback: 0.3)
|> compressor(threshold: -10, ratio: 4)
// Acid bassline with diode filter
[C2 C2 Eb2 C3 | C2 D2 Eb2 G2]
|> saw
|> glide(80ms)
|> diode(200, 0.85)
|> acidenv(sweep: 3000, decay: 0.1, resonance: 0.9)
|> clip(0.7)
|> delay(time: 1/8, feedback: 0.2)