Sanic Boom

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 Hz
  • resonance — 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

NameDescription
hallConcert hall (2.0s, bright)
platePlate reverb (1.5s, metallic)
chamberSmall chamber (0.8s, warm)
springSpring reverb (1.0s, vintage)
caveLarge cave (3.0s, dark)
spaceInfinite 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 seconds
  • time — 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 transitions

Parameters

  • 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 repeats

Parameters

  • 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 carrier

Parameters

ParameterDescriptionDefault
freqCarrier oscillator frequency in Hz. Lower values (50-200) add rumble; higher values (300-800) add metallic shimmer440
mixWet/dry blend. 0 = dry only, 1 = wet only, 0.3-0.5 typical for subtle effect1.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)
ParameterDescriptionDefault
cutoffBase cutoff frequency where the filter settles (Hz)200
sweepHow far the filter sweeps up from the base (Hz)2000
decayEnvelope decay time in seconds0.15
resonanceFilter resonance (0–1)0.8
accentAccent amount (0–1) — boosts volume and sweep range0.0
envModEnvelope 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 LFO

LFO 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))
ParameterDescriptionDefault
minMinimum output value0.0
maxMaximum output value1.0
speedNoise evolution speed in Hz1.0
seedRandom seed for reproducible patterns0
// 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)

On this page