MIDI-CI та MIDI 2.0 — SysEx еволюціонує
Цикл «Анатомія SysEx»: 1. Анатомія SysEx · 2. Yamaha DX7 · 3. Roland/Korg/Sequential/Circuit Tracks · 4. DAW та тулінг · 5. MIDI-CI та MIDI 2.0
SysEx існує з 1983 року й весь цей час лишався тим самим: бінарний потік, документація у PDF, нуль стандартизації поверх базового конверту. MIDI 2.0 не скасовує SysEx — він еволюціонує його через MIDI-CI (Capability Inquiry).
Що таке MIDI-CI
Протокол узгодження можливостей між пристроями — SysEx поверх SysEx: повідомлення MIDI-CI самі є пакетами Universal System Exclusive, але несуть структуровану JSON-подібну логіку. Чотири під-протоколи:
- Profile Configuration — пристрій оголошує підтримувані профілі, хост активує/деактивує їх динамічно.
- Property Exchange — REST-over-MIDI: хост читає й пише іменовані властивості пристрою, отримує JSON у SysEx.
- Process Inquiry — запит стану пристрою в реальному часі.
- Protocol Negotiation — перемикання між MIDI 1.0 і MIDI 2.0 на рівні транспорту.
F0 7E <device_id> 0D <category> <version> <source_muid> <dest_muid> <payload> F7
source_muid/dest_muid — 28-бітні унікальні ID пристроїв, 7F 7F 7F 7F = broadcast.
Property Exchange — REST поверх MIDI
Запит списку пресетів (GetProperty Request), тіло — JSON, закодований 7-бітними байтами:
{"resource": "ProgramList", "command": "get"}
Відповідь несе JSON у SysEx:
{"programs": [{"program": 0, "name": "E.PIANO 1"}, {"program": 1, "name": "BRASS 1"}]}
Різниця від старого SysEx принципова: більше не треба читати PDF-мануал, щоб дізнатись зміщення параметра — пристрій відповідає структурованими даними напряму.
import rtmidi
BROADCAST_MUID = [0x7F, 0x7F, 0x7F, 0x7F]
MY_MUID = [0x01, 0x00, 0x00, 0x00]
midi_out = rtmidi.MidiOut()
midi_out.open_port(0)
midi_out.send_message([
0xF0, 0x7E, 0x7F, 0x0D, 0x70, 0x01,
*MY_MUID, *BROADCAST_MUID,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF7
])
SysEx 8 — кінець nibblizing
Новий тип Universal MIDI Packet у MIDI 2.0: дані повністю 8-бітні, без 7-бітного обмеження старого SysEx.
| Параметр | SysEx 1.0 | SysEx 8 |
|---|---|---|
| Ширина даних | 7 біт | 8 біт |
| Nibblizing | потрібен | не потрібен |
| Розмір DX7 bulk dump | 4096 байтів | ~2048 байтів |
SysEx 8 живе всередині UMP (Universal MIDI Packet) — 32- або 64-бітних пакетів фіксованого розміру замість байтового потоку MIDI 1.0. Сумісність збережена: MIDI 2.0-пристрої обов'язково підтримують fallback до MIDI 1.0.
Чому SysEx не зникне
Мільярди SysEx-сумісних пристроїв нікуди не діваються; MIDI-CI сам передається як SysEx, тож нові пристрої говорять зі старими. Bitwig 5.x має експериментальну підтримку MIDI 2.0 — UMP лише через сумісні аудіоінтерфейси, MIDI-CI без підтримки в GUI, SysEx у Piano Roll лишається на версії 1.0. На практиці: старий SysEx писатимуть ще щонайменше 5–10 років.
MIDI-CI і Property Exchange — та сама історія, що SOAP → REST у вебі: бінарна строга схема поступається місцем ресурсам і get/set-семантиці, документація з WSDL перетворюється на ResourceList endpoint.
Further reading
MIDI 1.0 розробили за два тижні на зустрічі Дейва Сміта й Ікутаро Кекехаші в 1981-му, стандарт вийшов у 1983-му. MIDI 2.0 узгоджували з 2015 по 2020 — п'ять років між Yamaha, Roland, Korg, Native Instruments, Apple, Google і сотнею інших. Другий стандарт зайняв у 250 разів більше часу. Деякі речі в індустрії дорожчають разом із досвідом.