2009-07-25 2 views
4

Я пытаюсь прочитать информацию из файла .mid, но я вижу дополнительные байты, которые, похоже, не являются частью каких-либо сообщений midi. Я не уверен, как прогнозировать/разбираться с ними, и это бросает все остальное в моем проекте. Какие-либо предложения? Вот несколько примеров:Дополнительные байты в файлах .mid

 
4d 54 72 6b 00 00 04 48   Track Header 
00 c0 19       Program Change 
00 ff 03 07 54 72 61 63 6b 20 31 Track Title 
00 b0 05 00      Controller Event 
00 64 00 00 06 0c 00 26 00  ???? 
00 b0 20 00      Controller Event 

00 ff 58 04 0c 03 0c 08   Time Signature 
81 89        ???? 
50 ff 51 03 0f 42 40    Tempo 
00 ff 2f 00      End of Track 

00 ff 21 01 00     Unknown Meta Event 
30 b0 79 00      Controller Event 
00 07 64 01 0a 32 01 5b   ???? 
14 01 5d 11 01 20 00 00 00  ???? 
00 c0 23       Program Change 
8c 7c 90 23      ???? 

Я сомневаюсь, что у меня даже разбивка прямо здесь, потому что некоторые из них, кажется, имеют ненулевые времена дельты без всякой причины.

ответ

1

Похоже, вы даже не начинаете право. Первые восемь байт should be

4D 54 68 64 00 00 00 06

Я думаю, что сам файл обливал или вы не читаете его правильно?

EDIT: Ничего. Вы не сказали, что это было началом файла. Четыре байта у вас есть заголовок блока.

2

Дельта раз в MIDI-событиях переменной длины, поэтому каждое событие использует 1 или более байтов для кодирования времени, которое должно пройти от последнего события. См. this.

Каждое событие MIDI имеет дельта-время, равное 0 (указывающее, что оно происходит в то же время, что и предыдущее событие) или какое-то положительное значение (указывающее, что оно должно произойти после предыдущего события).

2

MusiGenesis получил это в два раза справа - вы не разбираетесь в дельтах переменной длины. Но другие события, которые вы видите, - это running status, что является методом, используемым для экономии полосы пропускания, путем исключения байт статуса при отправке нескольких сообщений одного типа.

Вот как это свалка должна быть разобрана:

 
4d 54 72 6b 00 00 04 48   Track Header 
00 c0 19       Program Change 
00 ff 03 07 54 72 61 63 6b 20 31 Track Title 
00 b0 05 00      Controller Event 
00 64 00       Running status (controller event) 
00 06 0c       Running status (controller event) 
00 26 00       Running status (controller event) 
00 b0 20 00      Controller Event 

и так далее. Но я не понимаю, почему после завершения сообщения трека перед следующим заголовком трека появляется целая куча дополнительных событий? Вы вставляли свой MIDI-файл целиком?

+0

Извините, я должен был указать. Это просто штуки, весь файл огромен, и я не могу опубликовать все байты между ними. Есть еще кое-что, что я не понимаю. Вот непрерывный фрагмент файла. 00 ff 21 01 00 (Неизвестное событие Meta) 30 b0 79 00 (смена контроллера) 00 07 64 01 0a 32 01 5b 14 01 5d 11 01 20 00 00 00 00 00 c0 23 Изменение программы 8c 7c 90 23 73 0d 23 Это за которым следует A LOT больше байтов, которые должны быть изменены контроллером. Нет заметки или примечания о событиях во всей дорожке, а несколько значений выше 7f отображаются только в режиме дельта. – Skunkwaffle

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