Skip to content
Voro
  1. Audio
  2. Instruments

Wavetable Synth

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.

  • Input 0: voices — note_voices_f32_v1 (required). Gate, pitch, velocity, and aftertouch per voice.
  • Output 0: out — stereo audio (PCM f32).
  • 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

  • voices row required
    note_voices_f32_v1

Outputs

  • out row
    audio_pcm_f32_stereo_v1
Sourcepath (Sourcepath) Str op('wavetable_synth').par.Sourcepath
Default:
"" (Empty String)
Mode (Mode) Menu op('wavetable_synth').par.Mode
Default:
wavetable_scan
Options:
wavetable_scan, sample_tonal, granular_pad
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