Файловете в протокола MIDI започват с хедър. Хедърът на файла MIDI съдържа информация, която описва цялата песен MIDI. Информацията, която следва, е организирана в писти.
Пистата във файла MIDI е информация във файла MIDI, която: 1) определя себе си като писта; 2) показва, че има определен размер; 3) съдържа самите съобщения в MIDI.
С други думи пистата има следната структура.
Описание | Дължина в байтове | Първи байт в пистата | Стойност |
Идентификация | 4 байта | 0x00 | Буквите "MTrk" |
Размер | 4 байта | 0x04 | От 1 до 65535 |
Данни | различни | 0x08 | Различни |
"Идентификацията" винаги е текста "MTrk", което показва, че това е една писта.
"Размерите" на пистите са най-различни. Размерът е броя на байтовете в пистата, които следват.
"Данните" са съобщенията в пистата.
Един файл MIDI може да съдържа една или повече писти (по принцип, от една до 65,535 писти). Това се определя от байтовете за "броя на пистите" в хедъра на файла (единадесетия байт и дванадесетия байт в хедъра).
Колко писти може да има в един файл MIDI зависи още и от формата на файла MIDI, който може да е 0, 1 или 2. Стойността 0 означава, че файла MIDI съдържа само една писта, в която са всичките съобщения в MIDI, включително и мета съобщенията, които съдържат мета информация за песента, а и музикалните съобщения, които всъщност предизвикват действия. Стойността 1 означава, че файла MIDI съдържа две или повече писти. Приема се, че тогава първата писта съдържа мета съобщенията, а останалите писти съдържат музикалните съобщения. Стойността 2 означава, че във файла има две или повече писти, но всяка писта представлява една независима поредица от съобщения в MIDI, която може да се изсвири заедно с останалите поредици или отделно и която може да има своите собствени мета и музикални съобщения. "Форматът" на файла MIDI се съдържа в деветия и десетия байт на хедъра на файла.
Данни MIDI и делта време MIDI
Данните в пистите MIDI се състоят от съобщения MIDI, всяко с някакво време, в следния ред.
Време на първото съобщение
Първо съобщение
Време на второто съобщение
Второ съобщение
…
В една система MIDI, в която едно устройство изпраща едно съобщение към едно друго устройство, получаващото устройство ще реагира както трябва. В тази система, не е необходимо да се каже на устройството, кога да реагира и съобщенията MIDI не носят стойности на времето. В един файл MIDI обаче, времето е необходимо. В една поредица от съобщения MIDI Свири Нотата в един файл MIDI например, устройството MIDI трябва да знае кога всяко от тези съобщения трябва да се изпълни и кога всяка нота трябва да се изсвири.
Следното е един пример на байтове, които могат да съществуват в един файл MIDI.
0x50 0x90 0x26 0x3C
Тук, 0x50 е времето, както е описано по-долу. 0x90 0x26 0x3C е съобщението MIDI.
Шестнадесетичната стойност 0x50 е десетичната стойност 80. Устройствата MIDI ще разберат това така, че това съобщение трябва да се извърши 80 пулса MIDI след предишното съобщение. Един пулс MIDI е някакво време. Дължината му зависи например от времевата резолюция на файла MIDI. За този пример, да предположим, че един пулс е 3125 микросекунди. Това съобщение тогата ще се изпълни 80 * 3125 = 250 милисекунди или една четвърт от секундата след предишното съобщение.
Забележи, че времето делта в MIDI е "делта" (разлика), а не "абсолютно" време. Определя времето след предишното съобщение, а не времето от началото на поредицата MIDI.
Трите байта (0x90 0x26 0x3C), които следват времето делта в MIDI са съобщението MIDI.
Броят на пулсовете в този пример е 80 десетично = 0x50 шестнадесетично и е записан с един байт във файла. Според протокола MIDI, времето делта в MIDI може да има неопределен брой байтове. Може да се съдържа в един байт, както в този пример, но може и да е в няколко байтове.
Всеки байт, който се използва за да се запише времето делта в MIDI, съдържа осем бита. Ако най-горният бит на байта е 1, устройството MIDI ще очаква повече байтове. Ако, най-горния бит на този байт е нула, устройството MIDI ще знае, че времето делта е завършено и това, което следва, е съобщението MIDI. Седемте останали бита във всеки байт се комбинират за да се създаде самато стойност на броя на пулсовете. В горния пример, шестнадесетичната стойност 0x50 съдържа битовете 01010000. Най-горният бит на този байт е нула и устройството MIDI следователно ще знае, че времето делта е само това.
Виж също:
Протокол Musical Instrument Digital Interface (MIDI)
Добави нов коментар