TW: vibe code
This is a node-based audio synth for the browser.
Data flows across three domains: MIDI, CV/gate, and audio.
- MIDI event streaming through MIDI player node
- MIDI to CV boundary node which outputs synth-friendly pitch in V/oct, gate/trigger, and CV
- Polyphony: each cable represents a set of voices, which can be independently held by downstream consumers
- A set of nodes enough to build frequency, phase, and ring modulation synthesis: VCO, VCA, LFO, Ratio, Filter, others
- An Envelope node with arbitrary number of phases and support for sustain/loop
- A Soundfont player using js-synthesizer (FluidSynth Emscripten build)
- Convolutional reverb, delay, and limiter nodes; the latter is built with Rust (because why not)
- Export/import in a simple .zip containing serialized project data and assets
The project is in active development and technically hasn't even reached version 0.0.1.
npm install
npm run devSome nodes (like the limiter) use WebAssembly compiled from Rust. To build these:
-
Install Rust via rustup;
-
Add the WASM target:
rustup target add wasm32-unknown-unknown
-
Install wasm-pack:
cargo install wasm-pack
WASM builds run automatically before npm run dev and npm run build. To skip them during UI-only development:
SKIP_WASM=1 npm run devnpm run typecheck
npm run build