Sanic Boom

Wavetable Synthesis

Morphing wavetable oscillators

Overview

Wavetable synthesis creates evolving, animated sounds by morphing between different waveforms stored in a table.

Built-in Wavetables

NameDescription
basicSine → saw → square → triangle
pwmPulse width modulation
acidTB-303 style resonant shapes
vocalVowel formants (A E I O U)
digitalHarsh digital textures
organicEvolving additive harmonics

Syntax

wavetable("name", position: 0.5, voices: 3, detune: 10)

Parameters

ParameterTypeDefaultDescription
namestring"basic"Wavetable to use
positionfloat/env0.0Morph position (0–1)
voicesint1Unison voice count (1–7)
detunefloat0.0Detune amount in cents

Examples

Basic Usage

// Simple wavetable sound
lead |> wavetable("acid")

// Different tables for different timbres
bass |> wavetable("digital")
pad |> wavetable("organic")

Animated Position

Sweep through the wavetable over time:

// Looping morph for evolving texture
lead |> wavetable("acid", position: env(0: 0, 2: 1, loop: true))

// One-shot sweep for risers
riser |> wavetable("basic", position: env(0: 0, 8: 1))

Unison for Thickness

Stack multiple detuned voices:

// Thick supersaw-style lead
lead |> wavetable("pwm", position: 0.7, voices: 5, detune: 15)

// Massive pad
pad |> wavetable("organic", voices: 7, detune: 20) |> reverb(0.6)

Use Cases

Psytrance Lead

let lead = [E5 G5 A5 B5]
    |> wavetable("acid", position: env(0: 0.2, 1: 0.8, loop: true), voices: 3, detune: 8)
    |> lowpass(3000)
    |> delay(1/8, 0.3)

play lead

Evolving Pad

let pad = [Cmaj7 Am7]
    |> wavetable("organic", position: env(0: 0, 4: 1), voices: 5, detune: 12)
    |> lowpass(2000)
    |> convolve("hall", mix: 0.5)

play pad

Digital Bass

let bass = [C2 _ G2 _]
    |> wavetable("digital", position: 0.3)
    |> lowpass(400)
    |> distortion(0.3)

play bass

On this page