Yamaha DX7 — еталон реалізації
Цикл «Анатомія SysEx»: 1. Анатомія SysEx · 2. Yamaha DX7 · 3. Roland/Korg/Sequential/Circuit Tracks · 4. DAW та тулінг · 5. MIDI-CI та MIDI 2.0
Yamaha DX7 (1983) коштував $2000 замість $10 000+ за аналогових конкурентів і розійшовся тиражем понад 200 000 одиниць. Кожен передавав патчі через SysEx, і саме DX7-реалізація стала де-факто зразком — чіткою, передбачуваною, добре задокументованою. Її вивчали всі, хто писав MIDI-софт у 80-х.
Типи повідомлень
Parameter Change — зміна одного параметра в реальному часі:
F0 43 0n 00 pp vv F7
n = MIDI channel (0-15)
pp = parameter number (0-155)
vv = value
Bulk Voice Dump Request — запит дампу 32 голосів:
F0 43 2n 00 F7
Bulk Voice Data — самі 32 голоси, 4096 байт:
F0 43 0n 09 20 00 [4096 bytes] cs F7
32 voices x 128 bytes each
Single Voice Dump — один голос, 155 байт:
F0 43 0n 00 01 1B [155 bytes] cs F7
Структура голосу (155 байт)
Шість FM-операторів по 17 параметрів (102 байти) плюс 53 байти глобальних параметрів:
| Зміщення | Байтів | Параметр |
|---|---|---|
| 0–101 | 102 | 6 операторів (17 байт кожен) |
| 102–109 | 8 | Pitch EG (4 Rate + 4 Level) |
| 110 | 1 | Algorithm (0–31) |
| 111 | 1 | Feedback + Osc Sync |
| 112–116 | 5 | LFO |
| 118–127 | 10 | Voice name (ASCII) |
Один оператор: EG Rate ×4, EG Level ×4, Keyboard Level Scaling ×4, Rate Scaling, AMS+Velocity, Output Level, Freq Coarse+Fine.
Checksum і .syx
def yamaha_checksum(data):
return (-sum(data)) & 0x7F
def validate_dx7_dump(sysex):
data = sysex[6:-2]
cs = sysex[-2]
return yamaha_checksum(data) == cs
.syx — це голі байти SysEx-повідомлення без заголовків: перший байт F0, останній F7.
with open('dx7_patch.syx', 'rb') as f:
data = list(f.read())
assert data[0] == 0xF0 and data[1] == 0x43 and data[3] == 0x09 and data[-1] == 0xF7
name_bytes = data[6+118 : 6+128]
voice_name = bytes(name_bytes).decode('ascii', errors='replace').strip()
Практичне попередження
DX7 замінює голос при отриманні bulk-дампу без підтвердження й без undo. 32 нові голоси — і старі зникли назавжди. Dump у файл перед будь-якою відправкою, завжди.
Further reading
- DX7 MIDI Implementation (Yamaha PDF)
- DEXED — open source DX7 плагін з повним SysEx support
- DX7 patch archive — patches.fm
Preset 11 заводської бібліотеки DX7 — «E.PIANO 1» — це електропіано з Take On Me, Jump і половини хітів Whitney Houston. FM-синтез придумав Джон Чоунінг у Стенфорді в кінці 60-х; університет продав ліцензію Yamaha за $1.2 млн авансу плюс роялті і заробив на ній близько $20 млн за 22 роки дії патенту. Чоунінгу зараз 87, і він досі композитор.