Ник Рейсман - извините, но я не согласен с вами ... парсинг миди в C #, C ++ - это что-то около 400 строк кода ... В этом нет ничего сложного и ничего сложного.
Советую начать с этой ссылки: https://web.archive.org/web/20141227205754/http://www.sonicspot.com:80/guide/midifiles.html
Здесь есть все, что вам нужно знать о миди и о том, как ее читать.
В кратком описании, как будет работать парсер:
1) Открыть миди в байтовом режиме
2) Прочитайте блок заголовка, где есть информация о размере, количестве дорожек и ВАЖНОМ формате файла !!
- Существует 3 типа форматов: 0,1,2 (тип 2 действительно «ценный», существует только несколько миди-файлов с этим типом, поэтому вам не нужно читать миди, если есть тип 2)
- если там не написано: "MThd" (0x4D546864)
, конец с ошибкой (это плохой миди-файл)
3) Чтение фрагмента трека
- если там не написано: "MTrk" (0x4D54726B)
заканчивается ошибкой (это плохой миди файл)
4) Читайте миди события ..
- Существует очень много событий, вы можете прочитать их все с помощью команд if-else, или вы можете прочитать только те события, которые хотите знать, например NOTE ON, NOTE OFF
- Иногда в некоторых миди-файлах нет NOTE OFF .. это событие меняется с NOTE ON и скоростью 0
На сайтах все объясняется действительно красиво. Если вы откроете midi-файл в байтовом режиме, у вас будет только несколько методов, и тогда все будет только о командах if-else, и там вы поймете, что хранится прямо сейчас.
Важно понимать переменную длину, но на сайтах это тоже объясняется. Это не трудно. Вы можете погуглить многие сайты, где объясняется ПЕРЕМЕННАЯ ДЛИНА, с некоторыми изображениями и примерами. Поэтому я не думаю, что это трудно объяснить здесь.
Если вам нужен еще совет, напишите мне, я попробую. Но разбор миди не так сложен, как выглядит. Если у вас возникли проблемы, напишите мне ..