MIDI-повідомлення: status byte, data bytes і структура
Зображення створено за допомогою генеративного ШІ для MIDITAUR. Концепція, композиція та текстове наповнення — MIDITAUR.
Зміст публікації

MIDI 1.0 передає музичні команди як послідовність байтів. Щоб правильно читати та налагоджувати MIDI-потік, корисно розрізняти дві речі: status byte, який визначає тип повідомлення, і data byte, який несе параметри цього повідомлення.
Що таке MIDI-повідомлення
MIDI message — це одна команда або подія, закодована одним status byte і, залежно від типу повідомлення, нулем, одним, двома або змінною кількістю data bytes. Наприклад, Channel Voice Note On зазвичай має status byte, note number і velocity.
Саме повідомлення не є «звуком». Воно описує дію: натиснути ноту, відпустити її, змінити controller, вибрати program, передати synchronization або system information.
Status byte і data byte: як відрізнити
У MIDI 1.0 найстарший біт самого 8-бітного MIDI byte — MSB — використовується як ознака типу:
- status byte завжди має MSB = 1, тобто його значення лежить у діапазоні 0x80–0xFF;
- data byte завжди має MSB = 0, тому його звичайний діапазон — 0–127.

Через це більшість числових MIDI-параметрів мають 7-бітний діапазон — 128 можливих значень. Приклади: note number 0–127, velocity 0–127, значення більшості Control Change 0–127.
Serial framing: чому один MIDI byte займає 10 біт
Класичний MIDI 1.0 electrical transport через 5-pin DIN працює як asynchronous serial link зі швидкістю 31.25 kbit/s. Кожен 8-бітний MIDI byte фізично передається у форматі 8-N-1: один start bit, вісім data bits, без parity і один stop bit.
- start bit = 0;
- 8 data bits передаються least-significant bit first;
- parity bit відсутній;
- stop bit = 1.
Отже, для передачі одного MIDI byte на дроті потрібно 10 bit times. Один bit time при 31,250 bit/s дорівнює 32 μs, тому один повний serial character займає 320 μs.
Це також пояснює практичне обмеження пропускної здатності класичного DIN-MIDI: навіть коротке трьохбайтове повідомлення потребує приблизно 960 μs лише на фізичну передачу трьох байтів.
Не плутайте serial bits із бітами MIDI byte
У старих описах часто кажуть, що «наступний після стартового біт визначає тип байту». Технічно точніше розділяти два рівні:
- start/stop bits належать до serial framing і не є частиною 8-бітного MIDI byte;
- MSB MIDI byte — це біт 7 усередині самого байта; саме він відрізняє status byte від data byte.
Оскільки 8 data bits передаються LSB-first, MSB фізично йде не одразу після start bit. Це важливе уточнення для тих, хто аналізує сигнал осцилографом або logic analyzer.

Скільки байтів має MIDI message
Довжина залежить від status byte. Наприклад:
- Note Off і Note On — status + 2 data bytes;
- Polyphonic Key Pressure — status + 2 data bytes;
- Control Change — status + 2 data bytes;
- Program Change — status + 1 data byte;
- Channel Pressure — status + 1 data byte;
- Pitch Bend Change — status + 2 data bytes.
System messages мають інші правила: частина з них не має data bytes, а System Exclusive може мати змінну довжину.
Що дає така структура
Ознака MSB дозволяє приймачу швидко синхронізувати логічний потік: будь-який byte зі старшим бітом 1 розпізнається як status. Data bytes зі старшим бітом 0 не можуть бути помилково прийняті за новий status byte.
Ця модель також лежить в основі Running Status: для частини Channel Voice messages повторний status byte можна не передавати, якщо status не змінився, а receiver продовжує трактувати наступні data bytes у попередньому контексті.
Практичний приклад
Повідомлення Note On для MIDI channel 1, note 60 і velocity 100 виглядає як три MIDI bytes:
0x90— status byte: Note On, channel 1;0x3C— data byte: note number 60;0x64— data byte: velocity 100.
У classic DIN transport кожен із цих трьох байтів отримує власні start/stop bits. Тому на кабелі фактично передаються 30 serial bits, хоча логічне MIDI message містить 24 біти у трьох MIDI bytes.
Пов’язана тема
Електричний рівень 5-pin DIN, current loop, opto-isolation і фізичне з’єднання MIDI IN/OUT розглянуто окремо в матеріалі MIDI: електричне з’єднання інтерфейсу.