MIDI Message Structure
A message is a status byte plus data bytes, and its frame explains most playback oddities.
Related
MIDI carries short, rigidly structured messages rather than sound.
The problem
The same note behaves differently in two programs, often because of the message. A channel off by one sends piano to the drums, while an out-of-range byte reads as a new status.
Protocol or message
A status byte has its top bit set; the high nibble is the type, the low nibble the channel. 0x9n is Note On, 0x8n is Note Off, 0xBn is Control Change, 0xCn Program Change. Data bytes run 0 to 127. A drum loop here stores 99 2A 57, meaning channel 10, key 42, velocity 87. Each event also carries a variable-length delta. Repeated messages may drop the status byte, called running status.
Settings and practice
Check the channel, the type, then the value range. A value above 127 needs two messages or a 14-bit controller. Do not rely on running status in hand edits; let the sequencer write the file.
What to listen for
Move a phrase to a neighbouring channel and piano may become drums, changing attack and tail. A few velocity steps go unnoticed, twenty move the accents.
Common misunderstandings
Messages are not samples, so deleting one leaves no sound. Channels count from 0, while 1 to 16 in interfaces is only a habit. Running status only omits a repeated status byte; it is not compression.
Listen in the library
All tracks from midicn-lib — inline badge is the license tier (C1 commercial / C2 non-commercial / C3 study only).
Sources
- MIDI 1.0 规范对状态字节与数据字节的定义,依 MMA 公开规范核查,未抄文本
- 本库 main 区文件的字节统计,由本地 SMF 解析脚本核对,数值随文件而定
Used for fact-checking only; all prose is original.