mandrock-files / music

sysex-vendors

Roland, Korg, Sequential Circuits і Novation Circuit Tracks — чотири різні відповіді на одну задачу передачі патча по SysEx, від адресної моделі Roland до nibblized-формату Circuit Tracks.

Roland, Korg, Sequential, Novation Circuit Tracks

Цикл «Анатомія SysEx»: 1. Анатомія SysEx · 2. Yamaha DX7 · 3. Roland/Korg/Sequential/Circuit Tracks · 4. DAW та тулінг · 5. MIDI-CI та MIDI 2.0

SysEx не має єдиного стандарту на рівні payload — кожен виробник вирішував задачу передачі даних по-своєму. Порівняти Roland, Korg, Sequential Circuits і Novation Circuit Tracks — як порівняти архітектурні стилі: мета одна, естетика різна.

Roland — адресна модель

Замість «зміни параметра №47» Roland пише «дані за адресою 0x12 0x00». Data Set 1 (DT1) записує:

F0 41 dev model_id 12 addr_h addr_m addr_l data... cs F7

Data Request 1 (RQ1) запитує:

F0 41 dev model_id 11 addr_h addr_m addr_l size_h size_m size_l cs F7

Checksum охоплює і адресу, і дані:

def roland_checksum(address_bytes, data_bytes):
    total = sum(address_bytes) + sum(data_bytes)
    return (128 - (total % 128)) % 128

Адресна модель дозволяє звертатись до будь-якого параметра без перекомпіляції специфікації — MT-32, D-50, JV-1080 діляться однією оболонкою, різняться лише model_id і карта адрес.

Korg — простіше, менш уніфіковано

Кожен продукт Korg мав власний формат, без спільної адресної моделі між серіями:

Korg M1 (1988):       F0 42 3n 19 [command] [data...] F7
Korg Minilogue/Prologue: F0 42 30 00 01 2C [command] [data...] F7

Наслідок ставки на простоту реалізації: бібліотека для M1 не перевикористовується для Prologue.

Sequential Circuits — першопрохідці

Sequential Circuits (Dave Smith) реалізували SysEx у Prophet-5 Rev 3.3 (1982) — ще до офіційної специфікації MIDI 1.0. Формат мінімалістичний:

F0 01 [voice_number] [data bytes...] F7

Ні checksum, ні адреси — просто номер голосу і дані. Логічно для 1982-го: MIDI щойно народився, надійність лінії вважали достатньою. Пізніше, як Dave Smith Instruments і знову Sequential, компанія повернулась до структурованіших дампів у Prophet-6 і OB-6, але загальний лаконізм залишився.

Novation Circuit Tracks — сучасний підхід

Грувбокс 2020 року з двома синт-треками й чотирма MIDI-треками. Manufacturer ID — 3-байтовий (F0 00 20 29), Product ID — 0x01 0x64.

Запит синт-патча:

F0 00 20 29 01 64 40 00 F7

Дані патча у відповідь, у nibblized форматі — кожен байт розбитий на два напівбайти:

def encode_nibblized(raw_bytes):
    result = []
    for byte in raw_bytes:
        result.append((byte >> 4) & 0x0F)
        result.append(byte & 0x0F)
    return result

def decode_nibblized(nibbles):
    result = []
    for i in range(0, len(nibbles), 2):
        result.append((nibbles[i] << 4) | nibbles[i+1])
    return result

Один патч — 512 сирих байтів, 1024 у nibblized формі. Помилка в порядку high/low nibble дає корумпований патч без жодного error message — синт приймає дані мовчки й звучить неправильно. Верифікація round-trip (encode → decode → порівняти з оригіналом) тут не опційна.

Further reading

P.S. — серветка проти комітету

Dave Smith помер у 2022-му, у 72 роки; на його похороні колеги грали на Prophet і OB-6. Він встиг публічно схвалити MIDI 2.0, додавши, що оригінальний MIDI 1.0 «витримав випробування часом краще, ніж хтось очікував у 1983-му». Сам стандарт народився за два тижні на зустрічі Сміта з Ікутаро Кекехаші з Roland у 1981-му — за легендою, записаний на серветці.