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