Мид-файл ниже представляет собой простой миди-файл, содержащий только один трек и одну ноту;
Этот мид-файл очень простой, но хотя он и небольшой, он полон. Он содержит все необходимые заголовки миди-файлов, заголовки миди-дорожек, временные метки и другую информацию;
Давайте начнем побайтно разбирать приведенный выше MIDI-файл;
4D 54 68 64 00 00 00 06 00 00 00 01 01 E0 4D 54
72 6B 00 00 00 25 00 FF 03 05 B2 E2 CA D4 30 00
FF 51 03 07 A1 20 00 FF 58 04 04 02 18 08 00 90
3C 64 8E 7E 80 3C 40 00 FF 2F 00
Данные заголовка файла:
4D 54 68 64 00 00 00 06 00 00 00 01 01 E0
4D 54 68 64
: 0 ~ 3 байт , " MThd " нить ASCII код , Это mid Идентификатор файла ;
00 00 00 06
: 4 ~ 7 байт ,Этоиндивидуальный 4 байтцелое числочислов соответствии с, Отображение в формате Big Endian , Интегрированный низкий Кусочек в старший байт , Интегрированный высокий Кусочек в низкий байт , Эти данные представляют собой mid Длина заголовка файла , Длина заголовка файла здесь равна 6 , значит позади 6 байтда mid Диапазон заголовка файла ;
формат с прямым порядком байтов : Старший Кусочек хранится в младших байтах , В соответствии с писательскими привычками людей ;
формат с прямым порядком байтов : Младший кусочек хранится в младших байтах , Соответствие логике компьютерной обработки ;
00 00
: 8 ~ 9 байт ,выражать mid Формат файла ; 这两индивидуальныйбайтда short введите целое число, формат с прямым порядком байтов ;
Это формат 0, что означает, что имеется только одна дорожка;
00 01
: 10 ~ 11 байт , выражать MIDI Количество дорожек , short тип , формат с прямым порядком байтов ;
здесьвыражатьесть одинотслеживать , Информация о нотах и долях для всех каналов находится в этом треке. ;
01 E0
: 12 ~ 13 байт , Используется для указания базового времени ;
2 индивидуальныйбайт , быть разделенным на 3 часть , наивысшая позиция ( Нет. 15 Кусочек ) как логотип , Нет. 8 ~ 14 Кусочек как часть , Нет. 0 ~ 7 Кусочек как часть ;
Зависит от Вдаформат с прямым порядком расположение байтов ,mid документ Нет. 12 байт ( нижний адрес ) да высокий Кусочек,mid документ Нет. 13 байт ( высокий адрес ) да Низкий Кусочек ;
01 E0
Бинарная форма : 0000 0001 11110 0000 ;
наивысшая позиция 0000 0001 11110 0000 да 0 ,красныйизданаивысшая позиция,выражатьтекущий представлятьизсобытие Форматда тип1, Нет. 0 ~ 14 Кусочек представлятьизда четвертная нота tick число ;
шестнадцатеричный 01 E0
Соответствует слову из десятичного числа да 480 , это да Скажите что-тоиндивидуальныйчетвертная нотаиметь 480 tick ;
tick давремяодин Кусочек, Это mid Самая основная единица расчета временииз в документе Кусочек. ;
MIDI отслеживать , к MTrk 4D 54 72 6B
начинать , к FF 2F 00
Заканчивать ;
подизсодержаниедаодининдивидуальныйвесьиз MIDI отслеживатьдвоичныйинформация ;
4D 54 72 6B 00 00 00 25 00 FF 03 05 B2 E2 CA D4 30 00 FF 51 03 07 A1 20 00 FF 58 04 04 02 18 08 00 90 3C 64 8E 7E 80 3C 40 00 FF 2F 00
4D 54 72 6B
: MTrk из ASCII код ;
00 00 00 25
: Этоодининдивидуальный int типизировать целочисленный типчисло в соответствии , Отображение в формате Big Endian ,midi отслеживатьдлинадашестнадцатеричныйиз 0x25, То есть, дадесятичный из 37 , представлять从下одининдивидуальныйбайтначинатьсчитатьчисло приезжать отслеживать Заканчивать Кусочекнабор FF 2F 00 из最后одининдивидуальныйбайт , общий 37 индивидуальныйбайт ;
Каждыйиндивидуальныйотслеживатьначинатьизлоготипда MTrk, позжеиз 4 Длина байта ;
На картинке ниже , Выбранный избайт имеет
индивидуальныйбайт ;
delta-time интервал да mid Важные механизмы в Китае ;
midi середина ноты , событие извремяинтервал , Все прошло delta-time воплощать из ;
delta-time даодининдивидуальныйвсечисло,Кусочекчисло Не исправлено, Это десять углу tick , это да 【BLE MIDI】MIDI Анализ формата файла ( MIDI Анализ заголовка файла | MIDI Идентификатор заголовка файла | MIDI Длина заголовка файла | MIDI Формат файла | MIDI Количество дорожек | основное время ) 2. Анализ заголовка MIDI-файла 5. Основное время Глава Расчет в блогаиз tick время ;
delta-time из Каждыйиндивидуальныйбайтсередина , наивысшая позиция Нет. 7 Кусочек Используется для выражения непрерывного знака. ,позжеиз 0 ~ 6 Кусочек выражатьреальностьизчислов соответствии с ;
если delta-time Зависит от 2 байтовая композиция , Каждыйиндивидуальныйбайтсерединанаивысшая позиция непрерывный знак ,позже 0 ~ 6 Кусочекдачислов соответствии с, это даобъяснять Должен delta-time Фактическое исчисленное значение Только Кусочекчисло 14 Кусочек ;
кпозжеиз 8E 7E
delta-time Например :
8E 7E
Перепискадвоичный Кусочекчислодля : 1000 1110 0111 1110
Нет.одининдивидуальныйбайт 8E Перепискадвоичныйчислов соответствии с Кусочек 1000 1110 ,其середина Нет.Семь Кусочекиз 1 выражать Это delta-time извысокий Кусочекбайт, позжеиз 000 1110 дафактическое изчислозначениечислосогласно ;
Нет.одининдивидуальныйбайт 7E Перепискадвоичныйчислов соответствии с Кусочек 0111 1110 ,其середина Нет.Семь Кусочекиз 0 выражать Это delta-time из Низкий Кусочекбайт, позжеиз 111 1110 дафактическое изчислозначениечислосогласно ;
тогда delta-time из фактического числа согласно да 000 1110 111 1110 , После перегруппировки это 111 0111 1110 ,Должен delta-time изценитьда 1918, это да 1918 индивидуальный tick число ;
к 82 C0 03
Например , Соответствует издвоичному числу по 1000 0010 1100 0000 0000 0011
Нет.одининдивидуальныйбайт 82 Перепискадвоичныйчислов соответствии с Кусочек 1000 0010 ,其середина Нет.Семь Кусочекиз 1 выражать Это delta-time извысокий Кусочекбайт, позжеиз 000 0010 дафактическое изчислозначениечислосогласно ;
Нет.дваиндивидуальныйбайт C0 Перепискадвоичныйчислов соответствии с Кусочек 1100 0000 ,其середина Нет.Семь Кусочекиз 1 выражать Это delta-time извысокий Кусочекбайт, позжеиз 100 0000 дафактическое изчислозначениечислосогласно ;
Нет.трииндивидуальныйбайт 03 Перепискадвоичныйчислов соответствии с Кусочек 0000 0011 ,其середина Нет.Семь Кусочекиз 0 выражать Это delta-time из Низкий Кусочекбайт, позжеиз 000 0011 дафактическое изчислозначениечислосогласно ;
тогда delta-time из фактического числа согласно да 000 0010 100 0000 000 0011 , После перегруппировки это 1010 0000 0000 0011 ,Должен delta-time изценитьда 40963, это да 40963 индивидуальный tick число ;
FF 03 05 B2 E2 CA D4 30
: 23 ~ 30 байт , FF 03 да Meta событие , проверить настройку имени ;
FF 03 Информация о длине позже , 05 выражать Долженотслеживатьимяиметь 5 байт ,позжеиз 5 байт Сразудаотслеживатьимя ;
отслеживатьинформацияпозжеиз 31 байт 00
да delta-time ;
FF 51 03 07 A1 20
: 32 ~ 37 байт , Обратите внимание на флаг скорости ;
FF 51 03
да Обратите внимание на флаг скорости Кусочек , позжеиз 07 A1 20
3 байтдаодининдивидуальныйчисло字 , представлять четвертная нота изDuration ,один Кусочекдамикросекунды ;
07 A1 20
Соответствует десятичному числуда 500000 , полмиллиона , это даодининдивидуальныйчетвертная нотада 50 Десять тысяч микросекунд ;
до 【BLE MIDI】MIDI Анализ формата файла ( MIDI Анализ заголовка файла | MIDI Идентификатор заголовка файла | MIDI Длина заголовка файла | MIDI Формат файла | MIDI Количество дорожек | основное время ) 2. Анализ заголовка MIDI-файла 5. Основное время Глава блога анализироватьприезжатьодининдивидуальныйчетвертная нотаиметь 480 индивидуальный tick ;
На данный момент расчет индивидуальный tick изDurationдля
микросекунды;
Давайте еще раз рассмотрим delta-time расчет :
8E 7E
Перепискадвоичный Кусочекчислодля : 1000 1110 0111 1110
Нет.одининдивидуальныйбайт 8E Перепискадвоичныйчислов соответствии с Кусочек 1000 1110 ,其середина Нет.Семь Кусочекиз 1 выражать Это delta-time извысокий Кусочекбайт, позжеиз 000 1110 дафактическое изчислозначениечислосогласно ;
Нет.одининдивидуальныйбайт 7E Перепискадвоичныйчислов соответствии с Кусочек 0111 1110 ,其середина Нет.Семь Кусочекиз 0 выражать Это delta-time из Низкий Кусочекбайт, позжеиз 111 1110 дафактическое изчислозначениечислосогласно ;
тогда delta-time из фактического числа согласно да 000 1110 111 1110 , После перегруппировки это 111 0111 1110 ,Должен delta-time изценитьда 1918, это да 1918 индивидуальный tick число ;
Вышеупомянутое delta-time да 1918 индивидуальный tick , Соответствует извремяда
микросекунды
FF 58 04 04 02 18 08
: 39 ~ 45 байт , тактовый размер ;
FF 58 04 датактовый размеризлоготип ;
04 02 18 08 分别выражать :
, Знаменатель да 4 ;
позжеиз 00 да delta-time , 与下одининдивидуальный midi событиеинтервализ tick число ;
delta-time ссылка 【BLE MIDI】MIDI Анализ формата файла ( MIDI отслеживатьанализировать | MIDI отслеживатьголова | MIDI отслеживатьдлина | delta-time интервал ) 4. дельта-время интервал Глава блога ;
90 3C 64
: 47 ~ 49 байт , Примечание по команде ;
90 да, обратите внимание на знак ;
3C да, обратите внимание на высоту звука 60 , Диапазон значений 0 ~ 127 ;
64 да, обратите внимание на значение скорости , Диапазон значений 0 ~ 127 ;
позжеиз 8E 7E да delta-time , Инструкция с позжеизинтервализ tick число ;
delta-time ссылка 【BLE MIDI】MIDI Анализ формата файла ( MIDI отслеживатьанализировать | MIDI отслеживатьголова | MIDI отслеживатьдлина | delta-time интервал ) 4. дельта-время интервал Глава блога ;
80 3C 40
: 52 ~ 54 байт , команда выключения заметок ;
80 да, обратите внимание на знак ;
3C да, обратите внимание на высоту звука 60 , Диапазон значений 0 ~ 127 ;
40 да, обратите внимание на значение скорости , Диапазон значений 0 ~ 127 ;
позжеиз 00 да delta-time , Инструкция с позжеизинтервализ tick число ;
delta-time ссылка 【BLE MIDI】MIDI Анализ формата файла ( MIDI отслеживатьанализировать | MIDI отслеживатьголова | MIDI отслеживатьдлина | delta-time интервал ) 4. дельта-время интервал Глава блога ;
FF 2F 00
: 56 ~ 58 байт , Аудиодорожка Заканчивать логотип ;
До сих пор ,всеиндивидуальный midi Анализ файла завершен ;