Современный браузер может запросто «уронить» синтезатор 1983 года через Web MIDI API. Внутри культового Yamaha DX7 стоит 8-битный Hitachi 6305 с тактовой частотой 2 МГц и буфером RAM на смешные 256 байт. Когда браузер, работающий в гигагерцах, шлёт данные через USB-to-MIDI адаптер, дешёвый переходник без буфера мгновенно выплёвывает их в синтезатор. Тот не успевает — буфер переполняется, CPU зависает, пакеты теряются, а внутренняя память звуков просто разрушается.
Проблема в том, что у стандартного MIDI нет аппаратных линий handshake (ни RTS, ни CTS). Синтезатор физически не может сказать браузеру «стоп, я сейчас пишу пресет в SRAM». Единственный выход — программный throttle прямо в JavaScript. Разработчики режут поток на чанки по 256 байт и вставляют задержку в 60 миллисекунд между пакетами — этого времени хватает, чтобы древний 8-битный процессор успел сохранить блок в EEPROM.
Но даже после того, как канал связи настроен, начинается ад с форматами данных. MIDI-спецификация 80-х оставила формат системных эксклюзивных сообщений (SysEx) на усмотрение производителей — и каждый придумал что-то своё. Yamaha DX7 отдаёт ровно 4104 байта: заголовок, 4096 байт параметров, байт контрольной суммы и стоп-байт. Последние 10 байт каждого из 32 слотов голосов — это ASCII-символы имени патча. Roland Juno-106 вообще не умеет принимать запросы на дамп — синтезатор начинает передачу только когда юзер физически нажимает кнопку «WRITE» на панели. Korg M1 использует упакованную 7-битную архитектуру: статусные байты MIDI не могут иметь старший бит, поэтому данные группируются по 7 бит, а восьмые биты распаковываются отдельно. Для парсинга пришлось писать кастомные декодеры на битовых сдвигах.
Браузеры относятся к Web MIDI с паранойей — ведь эта штука позволяет сайту прошивать реальное железо. Google Chrome и Microsoft Edge требуют явного разрешения от пользователя. Safari и Firefox вообще блокируют Web MIDI API — боятся fingerprinting и уязвимостей, позволяющих писать SysEx напрямую в USB-устройства. Чтобы избавиться от всей этой головной боли, автор статьи построил сервис knob.monster — он подключает синтезатор прямо через браузерную вкладку и сохраняет пресеты в облаке.