The Patchbay_

MIDI Message Reference

The MIDI 1.0 channel and system messages — each status byte, its data bytes, and what it does. The byte-level reference for anyone sending or parsing MIDI in code.

MessageStatus byteData bytesMeaning
Note Off0x8nnote, velocityRelease a note on channel n.
Note On0x9nnote, velocityStart a note (velocity 0 acts as Note Off).
Poly Aftertouch0xAnnote, pressurePressure on an individual held note.
Control Change0xBncontroller, valueMove a controller — see the CC list.
Program Change0xCnprogramSelect a patch/instrument (one data byte).
Channel Aftertouch0xDnpressureSingle pressure value for the whole channel.
Pitch Bend0xEnLSB, MSB14-bit bend, centred at 8192.
System Exclusive0xF0 … 0xF7manufacturer dataArbitrary-length manufacturer message.

The low nibble n of a channel status byte is the MIDI channel (0–15, shown as 1–16). Data bytes are 0–127 (high bit clear). So a middle-C note-on at full velocity on channel 1 is 0x90 0x3C 0x7F. See the CC list, GM programs and note numbers.

How to read this

A MIDI message is a status byte followed by one or two data bytes. The status byte's high nibble is the message type; the low nibble is the channel (0–15, shown to users as 1–16).

0x80  Note Off        note, velocity
0x90  Note On         note, velocity
0xA0  Aftertouch      note, pressure
0xB0  Control Change  controller, value
0xC0  Program Change  program
0xD0  Channel Pressure pressure
0xE0  Pitch Bend      LSB, MSB (14-bit)

Data bytes are always 0–127 — the high bit distinguishes status from data.

Notes & gotchas

Related

MIDI CC listmidoGM drum map

← Back to reference