Web MIDI против старых синтов: лечим не железо, а тайминг пакетов
Банк из 32 тембров Yamaha DX7 содержит 4 104 байта и физически передаётся по DIN MIDI минимум за 1.313 с. Knob Monster предлагает после завершённых SysEx-команд добавлять управляемые интервалы через Web MIDI API, чтобы старый синтезатор успевал обработать операцию. Ограничение определяется не только скоростью линии, но и очередями на стороне приёмника.
Браузерный сервис Knob Monster применил планирование MIDI-посылок для загрузки SysEx в винтажные синтезаторы. Подход рассчитан на инструменты поколения Yamaha DX7, вышедшего в 1983 году: отправитель передаёт завершённые MIDI-сообщения по расписанию и оставляет приёмнику время на обработку очередной команды.
Проблема часто описывается как конфликт современного USB-MIDI с «медленным старым железом», однако физика интерфейса задаёт более точную картину. Классический DIN MIDI работает на 31.25 кбод. Каждый байт занимает десять последовательных бит: стартовый, восемь информационных и стоповый. Итог составляет 320 мкс на байт. Исправный USB–MIDI адаптер с DIN-выходом не способен выдать в кабель байты быстрее этого предела, даже если браузер или ОС подготовили пакет мгновенно.
Для DX7 это легко оценить по документированному размеру 32-голосного bulk dump: 4 104 байта. Одна такая передача занимает как минимум 1.313 с, причём расчёт не включает реакцию синтезатора после получения сообщения. Дальше проявляются особенности конкретного устройства: конечный входной буфер, обработка SysEx, запись во внутреннюю память, собственные задержки прошивки и поведение USB–MIDI интерфейса. Осциллограмма линии покажет штатную скорость 31.25 кбод даже в ситуации, где загрузка банка завершается ошибкой.
Web MIDI API даёт отправителю инструмент для управления этой частью тракта. Вызов `MIDIOutput.send(data, timestamp)` помещает данные в очередь, а временная метка задаёт момент передачи. Спецификация требует передавать целые валидные MIDI-сообщения: SysEx от `F0` до `F7` должен быть сформирован как законченная посылка. Поэтому почтий способ состоит в планировании полных команд с отдельными временными окнами, а не в нарезке одного SysEx на произвольные фрагменты.
Разработчик Knob Monster сообщает, что в его реализации между сообщениями используется интервал порядка 60 мс. Это эмпирическая настройка конкретного программного пути, не норма MIDI и не параметр Yamaha DX7. Она может оказаться избыточной для одного интерфейса и недостаточной для другого. Web MIDI также не получает от синтезатора прикладного подтверждения успешной записи и не создаёт настоящего механизма backpressure: пауза лишь снижает вероятность того, что следующая команда попадёт в занятый внутренний тракт устройства.
Инженерная ценность решения в разделении двух ограничений. Пропускная способность DIN MIDI фиксирована сериализацией байтов, а способность получателя принять команду зависит от его реализации. При сбоях SysEx полезно измерять форму и длительность посылки на DIN-выходе, проверять границы сообщений, сравнивать адаптеры и отдельно подбирать интервалы между операциями. Переход на планируемую отправку способен стабилизировать обмен, однако не заменяет диагностику кабеля, опторазвязки, интерфейса и самого синтезатора.