Swell
A playable synth for sound design with nothing to install: pick or import a wavetable, shape it, and play it from the computer keyboard or a MIDI controller.
- Category
- Experiment
- Status
- Early build
- Role
- Design and development
- Year
- 2026
Not linked yet. Swell is an early build and needs a desktop screen.

Overview
Swell is a wavetable synthesizer that runs in the browser on its own engine in an AudioWorklet. Two oscillators morph through 2048-sample wavetable frames, joined by a sub oscillator and noise, then a filter, three envelopes, three LFOs and an effects chain.
It ships with ten original factory wavetables generated when the page loads and twelve factory presets, and it imports standard single-cycle .wav wavetables so sound designers can bring their own. Patches save in the browser and export as .swell.json files.
Swell is early. The page is noindex and isn't linked from the site, it needs a laptop or desktop screen, and it can't record or export audio yet.
What it does
Two wavetable oscillators
Position morphs through the table's frames. Each oscillator has coarse and fine tuning, level and pan, and up to 8 unison voices with detune, width, blend, phase and random phase.
Sub, noise and filter
A sub oscillator (sine, triangle or square, one or two octaves down), colored noise, and a filter with 12 and 24 dB low-pass and high-pass, band-pass and notch modes, plus drive, key tracking and envelope amount.
Drag-and-drop mod matrix
Three envelopes, three LFOs with six shapes and tempo sync, velocity, note, mod wheel, four macros and a random source are dragged onto any knob that accepts modulation.
Effects
Distortion, chorus, a tempo-synced delay with ping-pong, a reverb and a three-band EQ, each with its own on switch.
Playing it
Plays from the computer keyboard, with A to K as white keys and Z and X for octave, or from any MIDI controller, with pitch bend, mod wheel and sustain. Poly, mono and legato modes with glide and up to 16 voices; an oscilloscope shows the output.
Wavetables and presets
Ten factory tables, twelve factory presets across lead, bass, pad, keys and pluck, import of standard .wav wavetables, user presets saved in the browser, and preset export to .swell.json.
How it was built
The DSP lives in one file
The AudioWorklet's code is a plain function inside synth.js, turned into a Blob URL at boot, so a static site with no build step never ships two files that could drift apart. The function closes over nothing; parameter ids and modulation routing arrive through the message port, and the worklet addresses parameters by index after that.
Band-limited wavetables
Every frame is stored as a stack of band-limited copies, from 1024 harmonics halving down to a pure fundamental, and each voice reads the copy that keeps every partial under Nyquist for the note it plays. Factory tables are built additively, so each level is the same sum with fewer terms; imported .wav frames go through an FFT and lose their upper harmonics level by level.
One parameter registry
Knobs, value formatting, modulation destinations and the worklet's parameter table are all generated from one list, so the interface and the DSP can't disagree about what a parameter is. Switches, counts and modes are flagged so the worklet never smooths them.
Built with
- AudioWorklet
- Web Audio API
- Web MIDI API
- Canvas 2D
- localStorage
- JavaScript with no framework and no build step
Want something like Swell?
Tell me what you are building and what it needs to do. rowenapichardo@gmail.com