- Audio
- Instruments
Wavetable Synth
Purpose
Section titled “Purpose”Wavetable Synth is a polyphonic instrument that scans through wavetable frames, plays tonal sample loops, or generates granular pad textures. It ships with 8 built-in procedural timbres (saw, square, organ, formant, soft, bell, metal, choir) so it produces sound immediately. Load any WAV file via Sourcepath for custom wavetable material.
Wire note_voices_f32_v1 from MIDI Note, a chord voicer, or any note-voice source into the voices input. Choose a mode, set Position to scan through the wavetable, and adjust Brightness and Motion for evolving timbres. Optionally set Sourcepath to a WAV file or folder for custom timbres. Wire the stereo audio output to Device Out, an effect chain, or a mixer.
Inputs and outputs
Section titled “Inputs and outputs”- Input 0: voices — note_voices_f32_v1 (required). Gate, pitch, velocity, and aftertouch per voice.
- Output 0: out — stereo audio (PCM f32).
Controls
Section titled “Controls”- Sourcepath — Path to a WAV file or folder for custom wavetable material. Empty uses the built-in timbres. When a folder is provided, the first WAV file (sorted alphabetically) is used.
- Mode — Playback engine: wavetable_scan (scan through wavetable frames with Position), sample_tonal (pitched looped playback of the loaded WAV), granular_pad (granular cloud texture from the loaded WAV).
- Rootnote — Root note for pitch mapping. Adjusting this after load rebuilds the wavetable frames.
- Position — Wavetable scan position (0-1). In wavetable_scan mode, sweeps through the available frames. In granular_pad mode, sets the grain source position.
- Brightness — Post-synthesis brightness filter. Also affects grain length in granular mode (brighter = shorter, tighter grains).
- Attackms / Releasems — Amplitude envelope attack and release times in milliseconds.
- Gain — Master output level.
- Drive — Saturation amount.
- Width — Stereo pan spread across voices.
- Detune — Per-voice pitch detune in cents for thickness.
- Motion — LFO-driven scan modulation depth. Adds autonomous movement to the wavetable position. Aftertouch also modulates this.
- Voicesafety — Automatic per-voice gain scaling (divides by the square root of active voice count) to prevent summing overload.
- Limiter — Output safety limiter.
- Up to 8 polyphonic voices.
- Built-in timbres are generated procedurally at allocation time (no external files required).
- Wavetable frames use mip-mapped tables with periodic edge blending for click-free scanning.
- Each voice uses two slightly detuned read heads scanning different table positions for stereo depth.
- In granular_pad mode, 3 grains per voice with Hann windowing and staggered respawn produce a smooth cloud texture.
- Aftertouch modulates both the wavetable scan position and the brightness filter for expressive performance.
Inputs
-
voicesrow required
Outputs
-
outrow
Parameters
Section titled “Parameters” Sourcepath (Sourcepath) Str
op('wavetable_synth').par.Sourcepath - Default:
"" (Empty String)
Rootnote (Rootnote) Float
op('wavetable_synth').par.Rootnote - Default:
60- Range:
- 0 to 127
Position (Position) Float
op('wavetable_synth').par.Position - Default:
0.34- Range:
- 0 to 1
Brightness (Brightness) Float
op('wavetable_synth').par.Brightness - Default:
0.76- Range:
- 0 to 1
Attackms (Attackms) Float
op('wavetable_synth').par.Attackms - Default:
7- Range:
- 0 to 5000
Releasems (Releasems) Float
op('wavetable_synth').par.Releasems - Default:
260- Range:
- 0 to 10000
Gain (Gain) Float
op('wavetable_synth').par.Gain - Default:
0.46- Range:
- 0 to 2
Drive (Drive) Float
op('wavetable_synth').par.Drive - Default:
0.18- Range:
- 0 to 1
Width (Width) Float
op('wavetable_synth').par.Width - Default:
0.92- Range:
- 0 to 1
Detune (Detune) Float
op('wavetable_synth').par.Detune - Default:
8.5- Range:
- -50 to 50
Motion (Motion) Float
op('wavetable_synth').par.Motion - Default:
0.18- Range:
- 0 to 1
Voicesafety (Voicesafety) Toggle
op('wavetable_synth').par.Voicesafety - Default:
On- Options:
- Off, On
Limiter (Limiter) Toggle
op('wavetable_synth').par.Limiter - Default:
On- Options:
- Off, On