Lists MIDI devices visible to the browser, logs incoming messages, and routes them to one of three sound engines.
Sound engine routes incoming MIDI to a sound source
Pure synthesis with one voice per note. Noise is white noise looped, with playback rate mapped to MIDI pitch.
Six sine operators per voice, wired into one of four hand-picked DX-style algorithms (one per preset). Pitch bend and mod wheel apply to all six operators.
Eight waveforms in a small bank (sine → triangle → square → sawtooth → pulses → harmonics-rich → spike). Slider crossfades between adjacent positions; while a note is held it morphs within the locked pair, and new notes lock to the current position.
Three synthesised kits sharing one set of primitives with kit-specific parameters. The 80s gated kit sends snare and toms through a ConvolverNode whose impulse response we synthesise on the fly — dense decaying noise truncated and faded at ~120 ms = the iconic chop. Listens on channel 10 only; notes 35–59 trigger kit pieces.
Loads sampled instruments from the public MIDI.js soundfont CDN. First note may have a brief delay while the instrument downloads.
Controllers live state of universal-MIDI controls (channel-aware)