An in-browser JUNO-style polysynth with diatonic chord pads, arpeggiator, sequencer automation, and a classic Roland RE-201 style space echo. Built with React, Vite, and Tone.js.
Music Theory Layer
- Keys & Scales: Switch among chromatic and modal scales (major, minor, dorian, etc.) to constrain chord/keyboard highlighting.
- Chord Engine: Diatonic triads, 7ths, add9, open voicings plus color chords (sus4, secondary dominant, borrowed major) with octave, inversion, and spread controls.
- Scale-Aware Transposition: Sequencer grid stores base patterns and remaps to the active key/scale plus a degree offset for live transposition.
- Arpeggiator: Up/Down/Up-Down/Random/Converge/Diverge/Oct-up modes driven by latched notes or chord pads, synced to transport.
Synthesis Path (Tone.js)
- Voices: 6-voice poly with per-voice Pulse, Saw, Sub, and Noise oscillators mixed into dual filters (HP + 24dB LP) feeding a VCA and panner.
- Modulation: Global LFO routable to PWM and pitch; manual PWM option; filter envelope with invert, key follow, and LFO mod depth.
- Envelope/VCA: ADSR or gate mode; per-voice gain is capped for headroom to avoid clipping while sustaining chords.
- Gain Staging: Voice bus and FX bus attenuated before summing; dual limiters (FX return and master) provide brickwall protection.
Effects & Signal Chain
- Chorus: Three-position I / II / I+II with reduced wet mix for subtle width.
- Space Echo (RE-201): Tape delay with feedback, bass/treble tone controls, and spring reverb blend; echo/reverb sends are clamped to prevent overload.
- Routing:
Voices → HPF → LPF → VCA → Voice Bus → (Dry + Chorus Send + Echo Send)Chorus → MasterandChorus → Echo SendSpace Echo → FX Bus → FX Limiter → Master Gain → Master Limiter → Destination
Interaction & Control
- Chord Pads & Keyboard: Pointer or MIDI note input; latch options for notes and chords; highlighted scale degrees for guidance.
- Sequencer: Step grid with per-step automation (e.g., filter cutoff, resonance) and degree offset for harmonic movement.
- MIDI: Note on/off, pad triggers, CC mapping for key synth parameters, and wake-up SysEx for Launchkey/Launchpad devices.
- Visualization: FFT + waveform analyzers fed from the post-limiter output.
Tech Stack
- Frontend: React + Vite + TypeScript, Tailwind-style utility classes.
- Audio: Tone.js for synthesis, modulation, transport, and FX; custom music theory helpers for scale/chord math.
- State & Automation: Centralized audio service (
services/audioService.ts) exposes param setters, sequencing, and live automation callbacks.
Running Locally
Prerequisites: Node.js (v18+ recommended)
- Install dependencies:
npm install - Start dev server:
npm run dev
Tips for Best Sound
- Keep oscillator and VCA levels moderate; raise slowly if patches feel quiet.
- Use the chorus modestly in I/II modes; reserve I+II for special width.
- Balance echo vs. reverb—heavy feedback can saturate the FX limiter.