2015-09-18 2 views
1

Я пытаюсь написать MIDI-парсер, но я достигаю события MIDI, которое не задокументировано в официальной документации (а именно http://www.midi.org/techspecs/midimessages.php).Что такое MIDI-событие 0x43?

В одном из файлов MIDI, которые у меня есть, я заметил, что сразу после события с записью 81 70 90 3c 00 я получаю следующие байты: 00 43 1e. Тем не менее, я не видел никакой документации о 0x43, выступающей в качестве идентификатора события MIDI. Как следует интерпретировать 0x43, и где я могу найти дополнительную информацию об этом?

Редактирование: MIDI является интерпретируемым, потому что я загрузил его в Logic Pro без проблем. Кроме того, моя интерпретация до 0x43 была точной.

+0

Способ работы MIDI состоит в том, что у них есть хотя бы один байт дельта-времени, чтобы сообщить интерпретатору, сколько времени он должен ждать после предыдущего события, прежде чем действовать на MIDI-событие (подробнее см. Http: // www. ccarh.org/courses/253/handout/vlv/). В этом случае '81 70' является дельта-временем, а фактический идентификатор события начинается с байта' 0x90', который является примечанием, а затем следует байт '0x3c', который говорит мне включить примечание C4 и, наконец, '0x00', который равен нулю (эти два байта эквивалентны вычитанию). –

+0

Это также соответствует ожидаемым нотам на MIDI. –

+0

UPDATE: Я предположил, что это нестандартное MIDI-событие на самом деле является просто неявной записью для примечания, которая в этом случае является '0x43' AKA G4, при томе' 0x1e'. Я изменил свой код, чтобы приспособиться к этому, и теперь, похоже, он правильно разобрался, поэтому я предполагаю, что это фактический случай. Теперь мне интересно, как это взаимодействие работает с нотами с битами, которые дополняют стандартные идентификаторы событий MIDI. –

ответ

3
81 70 90 3c 00 00 43 1e 

81 70: дельта времени (240 тиков)
90 3c 00: Note-On сообщение (на самом деле отметить выключен)
00: дельта время
43 1e: Note-On сообщение, используя текущий статус.

MIDI-спецификация говорит:

RUNNING STATUS

Только для голосовых и режим сообщений. Когда байт статуса принимается и обрабатывается, приемник остается в этом состоянии до тех пор, пока не будет принят другой байт статуса. Поэтому, если один и тот же байт состояния будет повторяться, его можно опционально исключить, так что необходимо отправить только байты данных. Таким образом, при запущенном статусе полное сообщение может состоять только из байтов данных.

Статус запуска особенно полезен при отправке длинных строк сообщений вкл./Выкл. Сообщений, где «Note On with Velocity of 0» используется для выключения Note.

Байт состояния всегда имеет самый старший бит (80-FF), в то время как байты данных всегда имеют четкость (00-7F). Поэтому всегда можно различать их.

+0

Фантастический. Я думал, что это будет как таковое, но я не нашел никакой документации для поддержки этой интуиции. Очень признателен! –

Смежные вопросы