A browser-based modular synthesizer built with Svelte 5 and the Web Audio API.
A virtual modular synthesizer where you can:
npm install
npm run dev
Open http://localhost:3000 (or the port shown), click "Start Audio", then add modules from the sidebar.
| Module | Category | Description |
|---|---|---|
| Oscillator | Source | Generates sine, square, sawtooth, triangle waveforms |
| Noise | Source | Generates white, pink, and brown noise for percussion and textures |
| Filter | Effect | Biquad filter (lowpass, highpass, bandpass, etc.) with modulation input |
| VCA | Effect | Voltage Controlled Amplifier for amplitude shaping |
| Reverb | Effect | Convolution reverb with programmable impulse responses |
| Delay | Effect | Echo effect with time, feedback, and mix controls |
| Chorus/Flanger | Effect | Modulated delay effect for wide chorus thickening and jet-like flanger sweeps |
| Distortion | Effect | Wave shaping distortion with adjustable drive and mix |
| Multi-FX | Effect | Ring modulator, bit crusher, wave folder, and tremolo with mix control |
| LFO | Modulation | Low frequency oscillator for modulation effects |
| ADSR | Modulation | Envelope generator with gate input and auto-trigger |
| Sequencer | Modulation | 16-step sequencer with gate/trigger outputs |
| Attenuverter | Modulation | Signal attenuator and inverter for modulation depth control |
| Mixer | Utility | 4-channel audio mixer with individual levels and master output |
| Mult | Utility | Signal splitter - duplicates one input to four outputs |
| Scope | Utility | Real-time oscilloscope for visualizing audio signals |
| Output | Output | Master gain with mute to speakers |
src/
├── main.ts # Entry point
├── App.svelte # Root component (autosave, session restore, audio gate)
└── lib/
├── content/ # Educational content (synthesis help guide)
├── core/ # Audio engine (registry, patch-engine, base-module, port helpers)
├── modules/ # Synth modules (17 total) + ADSR AudioWorklet processor
├── components/ui/ # Svelte UI components
│ ModuleShell (shared frame), ModuleFrame (content wrapper),
│ Port (shared port primitive), Module, SequencerModule,
│ ScopeModule, PatchBoard, CableLayer, ModulePalette,
│ SynthHelpModal, PresetBrowser, AutosaveStatus
├── stores/ # State management (patch stores, synth service, module-registry, presets)
└── types/ # TypeScript definitions
The synth includes a preset system for saving and loading patches:
No default presets are bundled. You create and save your own patches.
This project is configured for easy deployment to Netlify, which works great with private GitHub repositories.
Setup Steps:
Push to GitHub (if not already done):
git add .
git commit -m "Add Netlify deployment config"
git push origin main
Connect to Netlify:
Build Settings (Netlify should auto-detect, but verify):
npm run builddistnetlify.toml)Deploy:
https://yoursite-xxx.netlify.appPassword Protection (Optional but recommended):
Features:
For public repositories, you can also deploy to GitHub Pages. See the project wiki for GitHub Actions setup.
MIT