Tool

MIDI message decoder and hex converter

Paste MIDI bytes and read what they say, or build a message and see its bytes in hex, decimal and binary. It understands notes, Control Change, Program Change, pitch bend, pressure, and the clock and transport messages. Nothing is uploaded.

Separate bytes with spaces or commas. A 0x prefix or a trailing h is fine. Several messages in a row are read one after another.

Build a message

Optional. The bytes above are yours to copy either way.

Read a MIDI message by hand

  1. Look at the first byte. If it is 80 or above, it is a status byte.
  2. Its first hex digit is the message type: 9 is Note On, B is Control Change, C is Program Change, E is Pitch Bend.
  3. Its second hex digit is the channel, counted from 0, so 0 is channel 1 and F is channel 16.
  4. Read the data bytes that follow. Each is 00 to 7F, which is 0 to 127.

The first digit says what kind of message it is, and the second says which channel.

Every MIDI message type

Status (hex)MessageData bytesWhat they are
8nNote Off2Note number, release velocity
9nNote On2Note number, velocity. Velocity 0 means note off
AnPolyphonic Pressure2Note number, pressure
BnControl Change2Controller number, value
CnProgram Change1Program number
DnChannel Pressure1Pressure
EnPitch Bend2Fine half, coarse half of a value from 0 to 16383
F0 ... F7System ExclusiveAny numberMaker-specific data, closed by F7
F2Song Position Pointer2Position, in sixteenth notes
F3Song Select1Song number
F8MIDI clock0Sent 24 times for every quarter note
FA, FB, FCStart, Continue, Stop0Transport
FEActive Sensing0A keep-alive some devices send
FFSystem Reset0Returns a device to its power-on state

The n is the channel digit, 0 to F. Statuses 8 to E carry a channel, and the F statuses belong to the whole connection.

Know about running status

When several messages of the same type and channel follow each other, a device may send the status byte once and then only the data bytes. That is running status, and it is why a stream can show 90 3C 64 followed by 40 64 with no second 90. The decoder reads such a stream and marks the messages it filled in. A data byte with no status in front of it belongs to the last status that was sent.

Send the message you built

In Chrome, Edge and Firefox, the builder can send its message to any MIDI output the computer has: a synth, an interface, or a virtual cable to another app. On a Mac that cable is the IAC Driver, and the IAC Driver page turns it on in four clicks. Sending one message by hand is the quickest test of whether a device is listening. To watch what comes back from a device, use the MIDI tester.

Put a message on a button

InputConfig, the free Mac app I make, sends notes, Control Change, pitch bend, Program Change and the transport messages from a game controller button, a key or a foot pedal, through its own virtual MIDI port, and it turns the same messages coming in from a MIDI device into keyboard shortcuts. Once you can read a message, you can bind it. MIDI output and MIDI to keystroke on a Mac have the steps.

Questions

How do I read MIDI hex bytes?

The first byte is the status: its first digit is the message type and its second is the channel, counted from 0. The bytes after it are data. 90 3C 64 is Note On, channel 1, note 60, velocity 100.

What is 90 3C 64 in MIDI?

A Note On for middle C at velocity 100 on channel 1. 90 is Note On on channel 1, 3C is 60 in decimal and 64 is 100 in decimal.

How do I convert a MIDI CC to hex?

Write B, then the channel minus one as a hex digit, then the controller number and the value in hex. Volume at 127 on channel 1 is B0 07 7F. The builder on this page does it for you.

What does F8 mean in MIDI?

MIDI clock. Twenty-four of them are sent for every quarter note. FA is Start, FB is Continue and FC is Stop.

Why are MIDI data bytes never above 7F?

A byte with its top bit set, 80 and above, is always a status byte, so data bytes are limited to 0 through 7F, which is 0 through 127.

Can this page send a MIDI message?

Yes, in Chrome, Edge and Firefox. Press Send to a MIDI output, allow MIDI, pick an output, and the Send button sends the message you built. Safari does not offer MIDI to web pages.

Related

Download InputConfig on the Mac App StoreFree. macOS 14 or later. No account, nothing leaves your Mac. Open source on GitHub.

Updated