A web-based MIDI visualizer that displays playback on a Launchpad-style grid. Load a .mid file and watch a configurable grid of squares light up in sync with the music. Each cell is mapped to a MIDI note number, glowing with brightness proportional to note velocity.
- Grid visualization: adjustable rectangular grid of cells that light up when their assigned MIDI note is active
- Configurable mapping: assign any MIDI note number (0–127) to any cell via the config panel
- Uses WHiSq: Wicki–Hayden in Squares or Midimech mapping as default
- Audio playback: synthesized audio via Tone.js PolySynth, triggered in sync with the MIDI data
- ToDo: synthesizer configuration, audio sample loading
- Transport controls: play, pause, stop, and seek through the MIDI file
- ToDo: keep note on when paused inside note duration
- Click-to-preview: click any grid cell to hear its assigned note
- MIDI device input is also available for playing and displaying notes
npm install
npm run devOpen http://localhost:5173, drop a .mid file onto the import area, and press Play.
- Load a MIDI file — drag and drop a
.midfile onto the import area, or click Browse - Play — press Play to start audio and grid visualization
- Seek — drag the seek slider to jump to any position
- Configure the grid — click "Configure Grid" to edit which MIDI note each cell responds to.
| Build | Vite + TypeScript |
| UI | React 19 |
| State | Zustand 5 |
| Audio | Tone.js |
| MIDI parsing | @tonejs/midi |
npm run dev # Development server with HMR
npm run build # Production build
npm run preview # Preview production build locally