На MIDI-кабеле , MIDI сообщения передаются в тот момент, когда они предназначены. MIDI-файл - это запись MIDI-сообщений с метками времени для последующего воспроизведения. Комбинация метки времени и MIDI-сообщения называется событие . Существуют некоторые различия между сообщениями, которые появляются на MIDI-кабеле, и событиями, которые появляются в MIDI-файле.
Вы правы, что на MIDI-кабеле однобайтовые сообщения реального времени могут появляться в середине байтов других сообщений. Однако в файле MIDI важно отслеживать точное количество байтов для каждого события, поэтому сообщения реального времени не могут быть сохранены в файле MIDI в середине других событий.
Эксклюзивные системные события полезны для хранения в MIDI-файле, но в общем случае не имеет смысла хранить какие-либо другие сообщения System Common или System Real-Time в MIDI-файле.
$ FF Reset: В MIDI-кабеле байт состояния $ FF означает Reset. Однако, когда вы воспроизводите MIDI-файл, сброс принимающего MIDI-устройства во время воспроизведения обычно не имеет смысла. Поэтому в MIDI-файле байт состояния $ FF переопределяется для обозначения мета-события.
$ F6 Запрос на настройку: Если устройство отвечает на это сообщение, я думаю, что оно выполняет некоторую внутреннюю калибровку настройки, которая прерывает любое воспроизведение в процессе. Так похоже на сообщение Reset, нет смысла прерывать воспроизведение внутри MIDI-файла.
Часы, положение и сообщения о запуске / остановке (четверть кадра MIDI временного кода $ F1, указатель положения песни $ F2, выбор песни $ F3, часы $ F8, запуск $ FA, $ FB Continue, $ FC Stop): устройство или программное обеспечение, которое записывает MIDI-файл, обычно не записывает эти входящие сообщения в MIDI-файл. Однако устройство может иметь возможность интерпретировать эти сообщения для фактического изменения положения, запуска, остановки или управления скоростью воспроизведения или записи. Устройство или программное обеспечение, воспроизводящее файл MIDI, может иметь параметры для отправки этих сообщений на выходной порт MIDI для управления другими устройствами MIDI, которые воспроизводят свои собственные партии в дополнение к примечаниям файла MIDI. Из-за этого использования MIDI-плеер отвечает за отправку этих сообщений о часах, положении и запуске / останове, а не MIDI-файла.
$ FE Active Sensing: Если отправляющее устройство отправляет это сообщение, оно используется в качестве заполнителя в режиме ожидания, чтобы показать, что кабель все еще правильно подключен. Если принимающее устройство начинает видеть сообщения Active Sensing, а затем останавливается, оно может интерпретировать это как отключение кабеля и зависание заметок. Бесполезно хранить бездействующий наполнитель в файле MIDI. И отправлять его будет функция отправляющего устройства, а не ответственность MIDI-файла.
Если вам действительно нужно хранить сообщения System Common или System Real-Time в MIDI-файле, я считаю, что они могут быть сохранены в событии $ F7 в MIDI-файле. Насколько я понимаю, байты данных, хранящиеся в событии $ F7, будут передаваться дословно по MIDI-кабелю. Документ Sonic Spot называет это использование $ F7 событием «Авторизация SysEx» (прокрутите до конца документа). В Центре «промывания мозгов» технического фанатика MIDI документ Формат файла MIDI это использование $ F7 называется событием «Escape» (см. Страницу «События в MTrk»). Программное обеспечение MIDI-секвенсора Sekaiju * 1048 * называет $ F7 событием "SysEx (Произвольное)".
Общее предупреждение: На сайте Ассоциации производителей MIDI вы можете найти официальную информацию (таблицы и дополнения к стандартам) или задать вопросы на форуме , Но, как вы, наверное, знаете, основное содержание официальных стандартов MIDI стоит денег . Я не купил их, поэтому мое понимание выше основано на описаниях сторонних веб-сайтов и общем использовании программного обеспечения MIDI. Вы должны всегда помнить, что третьи стороны могли интерпретировать что-то иначе, чем официальные стандарты. (Например, в документе «Центр промывания мозгов» Джеффа Глатта «Технический фанатик» MIDI Спецификация MIDI говорится, что $ F9 - это тиковое сообщение, но MMA говорит, что сообщение $ F9 не определено и зарезервировано . Глатт говорит Общая MIDI-программа 47 - «Оркестровые струны» , MMA говорит: Программа 47 - «Оркестровая арфа» .)