MIDI Message Decoder
Decode raw MIDI hexadecimal bytes and inspect status, message type, MIDI channel, note number, note name, velocity, controller, program number, channel pressure, pitch bend and common system messages.
80 through EF contain the message
type in the high nibble and channel number in the low nibble. MIDI data bytes
use only seven bits and therefore range from 0 through 127.
—
—
—
What Is a MIDI Message?
MIDI, or Musical Instrument Digital Interface, represents musical events and device-control information as compact byte messages. A MIDI message normally begins with a status byte whose most significant bit is one.
Channel Voice messages use status bytes from 0x80 through 0xEF. The high nibble identifies the message type while the low nibble identifies one of 16 MIDI channels.
MIDI Status Byte Format
Example:
90 3C 64
90:
Status byte
9:
Note On message type
0:
Channel index 0
Displayed MIDI Channel = 1
3C:
Note number 60
64:
Velocity 100Common MIDI Channel Message Types
| Status High Nibble | Message | Data Bytes |
|---|---|---|
| 8 | Note Off | 2 |
| 9 | Note On | 2 |
| A | Polyphonic Key Pressure | 2 |
| B | Control Change | 2 |
| C | Program Change | 1 |
| D | Channel Pressure | 1 |
| E | Pitch Bend Change | 2 |
MIDI Note Number to Note Name
MIDI note numbers range from 0 through 127. With the common convention where MIDI note 60 is middle C, note 60 is displayed as C4.
MIDI Note:
60
60 mod 12:
0
Pitch Class:
C
Octave:
4
Result:
C4MIDI Note On
90 3C 64
Status:
90
Type:
Note On
Channel:
1
Note:
3C = 60 = C4
Velocity:
64 hex = 100 decimalA Note On message with velocity zero is commonly treated as the equivalent of a Note Off event.
MIDI Note Off
Note Off normally uses status high nibble 8. The first data byte is the note number and the second is the release velocity.
80 3C 40
Note:
60 = C4
Release Velocity:
64 decimalMIDI Control Change
Control Change messages use status high nibble B. The first data byte identifies the controller and the second data byte gives its value from 0 through 127.
B0 01 40
Channel:
1
Controller:
1 = Modulation Wheel
Value:
64Common MIDI Controllers
| CC | Controller |
|---|---|
| 1 | Modulation Wheel |
| 2 | Breath Controller |
| 7 | Channel Volume |
| 10 | Pan |
| 11 | Expression Controller |
| 64 | Sustain Pedal |
| 65 | Portamento |
| 71 | Resonance / Timbre |
| 74 | Brightness |
| 120 | All Sound Off |
| 121 | Reset All Controllers |
| 123 | All Notes Off |
MIDI Program Change
Program Change messages use only one data byte after the status byte. The raw MIDI program value ranges from 0 through 127.
C0 28
Status:
C0
Channel:
1
Program Value:
40 decimal
Human one-based program number:
41MIDI Pitch Bend
Pitch Bend Change uses two seven-bit data bytes to create one 14-bit value. The first data byte contains the least-significant seven bits and the second contains the most-significant seven bits.
E0 00 40
LSB:
0
MSB:
64
Pitch Bend:
(64 × 128) + 0
= 8192
Center:
8192
Signed displacement:
0The numerical range is 0 through 16,383, with 8,192 representing the center position.
MIDI System Real-Time Messages
| Status | Message |
|---|---|
| F8 | Timing Clock |
| FA | Start |
| FB | Continue |
| FC | Stop |
| FE | Active Sensing |
| FF | System Reset |
MIDI System Common Messages
| Status | Message | Data Bytes |
|---|---|---|
| F1 | MIDI Time Code Quarter Frame | 1 |
| F2 | Song Position Pointer | 2 |
| F3 | Song Select | 1 |
| F6 | Tune Request | 0 |
| F7 | End of SysEx | 0 |
MIDI Data Byte Range
Normal MIDI data bytes have their top bit clear. Therefore, their numeric range is 0 through 127.
Valid data byte:
0xxxxxxx
Range:
00 through 7FBytes with the high bit set are status bytes or system-status values rather than ordinary data bytes.