Wavetable Synthesis
Morphing wavetable oscillators
Overview
Wavetable synthesis creates evolving, animated sounds by morphing between different waveforms stored in a table.
Built-in Wavetables
| Name | Description |
|---|---|
| basic | Sine → saw → square → triangle |
| pwm | Pulse width modulation |
| acid | TB-303 style resonant shapes |
| vocal | Vowel formants (A E I O U) |
| digital | Harsh digital textures |
| organic | Evolving additive harmonics |
Syntax
wavetable("name", position: 0.5, voices: 3, detune: 10)Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| name | string | "basic" | Wavetable to use |
| position | float/env | 0.0 | Morph position (0–1) |
| voices | int | 1 | Unison voice count (1–7) |
| detune | float | 0.0 | Detune 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 leadEvolving 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 padDigital Bass
let bass = [C2 _ G2 _]
|> wavetable("digital", position: 0.3)
|> lowpass(400)
|> distortion(0.3)
play bass