Как мне анализировать / игнорировать неуказанные команды в стандартном файле MIDI? - PullRequest
0 голосов
/ 06 ноября 2011

Я пытаюсь проанализировать MIDI-файлы, но мой анализатор не может анализировать большинство MIDI-файлов из Интернета, потому что он все время спотыкается о байтах команд, не указанных в спецификациях SMF.MIDI-файлы, экспортируемые с помощью FL Studio, работают нормально, но почти все остальные MIDI-файлы ломаются.

Например, из этого миди-файла :
00 B0 20 02 |00 00 00 |00 C0 00
Первая часть легко разбирается.Это изменение управления в соответствии со спецификациями MIDI.Но вторая часть не имеет смысла.Что делать после 0 тиков?Сколько байтов я могу ожидать после этого?0x00 не указывается в качестве команды в SMF.Тем не менее, часть сразу после этого распознаваема, так что вы можете видеть, что вторая часть имеет 1 байт данных.

Однако, если я просто обхожу предыдущую проблему, позже она станет настоящим беспорядком:
00 C0 00 |00 B0 07 6E |00 0A 40 00 5B 46 00 5D 00 00 5E 19 86 70 90 41 6E 00 45 6E 48 45 00 00 41 00 00 43 6E 48 43 00 00 48 6E 60 48 00 00 3C 6E 00 35 6E 30 35 00 [и т. Д.]
Хорошо, давайте посмотрим.Смена патча, проверка.Смена контроллера, проверка.0A?Что, черт возьми, делает 0А?Попытка распознать любые команды после части 0A тоже не работает, все это один большой беспорядок, и я понятия не имею, что принадлежит этой команде 0A или когда начинается следующая фактическая команда SMF.Я просто понятия не имею, как разобрать оставшуюся часть трека после этого беспорядка.

Тем не менее, такие программы, как Winamp и FL Studio, могут нормально открывать эти MIDI-файлы.Как они это делают?Как узнать, когда заканчиваются ненужные данные и запускаются правильные команды?

1 Ответ

2 голосов
/ 06 ноября 2011

Это не ненужные данные. Это запущенный статус. Если после обработки команды следующий байт меньше $ 80, вы принимаете тот же байт состояния, что и предыдущая команда. Вот описание рабочего состояния.

...