MIDI Monitor
A browser-based MIDI analyzer for debugging controllers, synths and DAW setups. Connect, and every incoming message from every input is decoded into a time-stamped log with channel, type, values and raw hex bytes. Filter what you see, pause, and export the log as CSV or text.
Last updated:
| Time (s) | Δ ms | Input | Ch | Type | Data | Hex |
|---|---|---|---|---|---|---|
| Waiting for MIDI messages… | ||||||
Newest messages appear at the top. The view keeps the latest 400 matching rows; exports include every captured message that matches the filters (up to 50,000).
How to use the MIDI Monitor
- Connect your MIDI device by USB, Bluetooth MIDI or a virtual MIDI port.
- Press Connect MIDI and allow access. Tick Request SysEx first if you need to see System Exclusive data.
- Play, turn knobs or start your sequencer: each message appears at the top of the log, decoded and in hex.
- Use the filters to hide noisy messages such as clock and active sensing, or show a single channel or port.
- Press Pause to freeze the view, then Download CSV or Copy log to save what you captured.
MIDI message reference
Every MIDI 1.0 message starts with a status byte from 0x80 to 0xFF, followed by zero or more data bytes from 0x00 to 0x7F. For channel messages, the upper four bits are the message type and the lower four bits are the channel minus one.
| Status (hex) | Message | Data bytes | Notes |
|---|---|---|---|
| 8n | Note off | note, release velocity | A 9n note on with velocity 0 also means note off |
| 9n | Note on | note, velocity 1–127 | Middle C = note 60 (C4), A4 = 69 |
| An | Polyphonic aftertouch | note, pressure | Per-key pressure |
| Bn | Control change | controller 0–119, value | 120–127 are channel mode messages |
| Cn | Program change | program 0–127 | Usually displayed as 1–128 |
| Dn | Channel pressure | pressure | One value for the whole channel |
| En | Pitch bend | LSB, MSB | 14-bit, 8192 = center; shown here as −8192 to +8191 |
| F0 … F7 | System Exclusive | manufacturer ID, any data | ID 7E/7F = universal; 00 xx xx = 3-byte ID |
| F1 | MTC quarter frame | piece type + value | 8 pieces make one full timecode |
| F2 | Song position pointer | LSB, MSB | Counted in sixteenth notes (6 clocks each) |
| F8 | Timing clock | none | 24 per quarter note |
| FA / FB / FC | Start / Continue / Stop | none | Sequencer transport |
| FE | Active sensing | none | Sent about every 300 ms by some keyboards |
| FF | System reset | none | Rarely used |
Useful formulas: note frequency f = 440 × 2(n − 69)/12 Hz; pitch bend value = (MSB × 128 + LSB) − 8192; clock tempo BPM = 60,000 ÷ (24 × average ms between F8 messages).
Debugging with the monitor
- Nothing arrives: check that the device shows a green dot in the input list. If another app (some DAWs on Windows) has exclusive access to the port, close it, then press Reconnect MIDI.
- Wrong channel: filter to All channels and look at the Ch column. A synth that ignores your controller is often set to listen on a different channel.
- Knob does nothing in your software: confirm its CC number here and map that number in the software. Endless encoders often send relative values like 1 and 127 (or 65 and 63) instead of 0–127.
- Stuck notes: look for a Note on without a matching Note off for the same note and channel.
- Tempo drift: watch the Clock BPM; steady sources stay within a fraction of a BPM. Large jumps point to USB hubs, Bluetooth latency or a busy computer.
- SysEx dumps: enable SysEx, start the dump on the device, then Download TXT or CSV to keep the hex for later.
Frequently asked questions
Which browsers support this MIDI monitor?
It uses the Web MIDI API, available in Chrome, Edge, Opera and other Chromium browsers on desktop and Android, and in Firefox 108 or newer. Safari and all browsers on iPhone and iPad do not support Web MIDI. The page must be opened over HTTPS, which it is.
Why don't I see SysEx messages?
Browsers only deliver System Exclusive data when the page asks for SysEx permission. Tick Request SysEx before pressing Connect and accept the prompt. If you already connected without it, reload the page and connect again with the box ticked.
What do the hex bytes mean?
Each MIDI message starts with a status byte (80 to FF in hex) followed by data bytes (00 to 7F). For channel messages the first hex digit is the type, for example 9 for note on or B for control change, and the second digit is the channel minus one, so 90 is note on channel 1 and BF is a control change on channel 16.
Why do I see thousands of clock messages?
A device that sends MIDI clock transmits 24 clock messages (F8) per quarter note, which is 48 per second at 120 BPM. They are hidden by default; tick Clock to show them. The BPM readout is calculated from them either way.
Is a note on with velocity 0 a note off?
Yes. The MIDI specification treats a note on message with velocity 0 as a note off, and many keyboards send it that way to make use of running status. The monitor labels these as Note off (vel 0) so you can tell them apart from real 8n note off messages.
How is this different from the MIDI keyboard tester?
The keyboard tester focuses on playing: a lit piano, velocity range and stuck-note checks. The MIDI monitor is a protocol analyzer for every message type, with SysEx hex, per-port and per-channel filters, time stamps and export for debugging.
Does the monitor send any MIDI data or upload my log?
No. It only listens to inputs, does not send anything to your devices, and keeps the log in your browser until you clear or export it.
Are all the tools on FreeToolCabin tested for quality and accuracy?
Yes! Every tool on our site undergoes automated Q/A testing in real browser environments to ensure high precision, correct output, and zero errors. If you happen to spot a bug or have a suggestion, please contact us at [email protected] and our team will review it right away.