juno-style polysynth

JUNO-style polysynth with diatonic chord pads, arpeggiator, sequencer automation

juno-style polysynth

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 → Master and Chorus → Echo Send
    Space 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)

  1. Install dependencies: npm install
  2. 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.