Събитието в MIDI представлява данни, които се изпращат на едно устройство MIDI, за да го накарат да направи нещо по някое време.
Според протокола MIDI едно събитие в MIDI съдържа две парчета информация: 1) броя пулсове в MIDI, също така наречени делта време в MIDI, които показват по кое време трябва да се направи нещо; 2) съобщението в MIDI, което показва какво точно трябва да се направи. Едно събитие в MIDI например може да определи, че 1 секунда след началото на песента устройството MIDI трябва да започне да свири някаква определена нота на определен канал с определена сила. Други събития в MIDI могат да носят друга информация. Едно други събитие например може да покаже, че заглавието на една писта в е нещо определено.
Пример
Следното е пример на едно събитие в MIDI.
0x50 0x90 0x26 0x3C
Шестнадесетичната стойност 0x50 е времето делта на събитието. Десетичната стойност на този байт от данни е 80. Едно устройство MIDI ще разбере, че това събитие трябва да се изпълни 80 пулса след предишното събитие. Един пулс в MIDI е просто някаква стойност за времето и може да е различна при различните песни в MIDI. Дължината на един пулс в MIDI във файловете MIDI може например да се определи от времевата резолюция на файла. Да предположим например, че дължината на един пулс 3125 микросекунди. Тогава това събитие ще бъде изпълнено след 80 * 3125 = 250 милисекунди или една четвърт секунда след предишното събитие.
Трите байта (0x90 0x26 0x3C), които следват времето делта са съобщението в това събитие в MIDI.
Първият байт на съобщението (0x90) е статусния байт на съобщението в MIDI. В тукашния пример статусният байт съдържа горна "хапка" равна на 9 и ще бъде подразбран като статусен байт на едно съобщение "свири нотата" в MIDI. Това съобщение ще накара едно устройство MIDI да започне да свири някаква нота. Долната "хапка" на статусния байт е 0, което означава, че нотата ще бъде изсвирена на канал 0.
Тъй като това е съобщение за свиренето на някаква нота, устройството MIDI ще очаква още два байта. Първият от тези два байта (0x26) е нотата, която трябва да се свири и в този пример е Ре в една от по-долните октави. Последният байт е "скоростта" на нотата (сила или акцент в зависимост от устройството и изборите на неговите създатели) и в тукашния пример е 0x3C = 60 десетична стойност, което е средно (стойностите на скоростта варират от 0 до 127).
Времето делта MIDI
Броят на пулсовете в примера по-горе е 80 десетична = 0x50 шестнадесетична и се носи от един байт в събитието. Според протокола MIDI, броят пулсове може да бъде изразен с неограничен брой байтове. Всеки от тези байтове има осем бита. Ако най-горният (най-големият) бит на този байт е 1, тогава устройството MIDI ще очаква, че има още байтове във времето делта. Ако най горният бит е нула, тогава устройството MIDI ще разбере, че всички байтове от времето делта са получени и байтовете, които следват са част от съобщението в MIDI, а не от времето делта. В по-горния пример 0x50 шестнадесетично може да се представи с битовете 01010000. Най-горният бит на този байт е нула и следователно устройството MIDI ще разбере, че времето делта няма повече байтове.
Тъй като най-важният бит на всеки байт във времето делта в MIDI се използва за да се определи дали времето делта има още байтове, само седем бита от всеки байт се използват за да носят самото време делта (виж примера по-долу).
Времето делта в MIDI е "делта", а не "абсолютно" и е времето след предишното събитие, а не времето след началото на поредицата от събития в MIDI.
Статус на изпълнението в MIDI
Протокола MIDI позволява да не се използва статусния байт на някои съобщения в MIDI. Ако статусният байт липсва, тогава се подразбира, че този байт е същия, като байта на съобщението в предишното събитие. Често например, след изпращането / получаването на едно събитие за свиренето на нота, устройствата MIDI могат да изпращат или получават събития за свиренето на нота със нулева скорост за да спрат свиренето на тази нота. Статусният байт на второто съобщение за свиренето на нота не трябва да се използва, тъй като е същия, като статусния байт на предишното съобщение (ако няма други съобщения между двете съобщения). Устройството MIDI ще знае, че статусният байт липсва, тъй като стойността на един статусен байт е поне 0x80 и най-горния бит на тази стойност е 1, а най-високата нота в съобщенията за свиренето на ноти е 0x7F и има най-горен бит равен на 0.
Пример
Следното е един друг пример за събитие в MIDI.
0x83 0x60 0x26 0x00
В този пример времето делта в MIDI започва с 0x83 шестнадесетична = 10000011 двоична. Най-горният е 1 и следователно делта времето има поне още един байт. Вторият байт на времето делта тогава е 0x60 шестнадесетична = 01100000. Най-горният бит на този байт е 0 и следователно това е края на времето делта в MIDI. Стойността на времето делта в MIDI се определя като се вземат най-ниските седем бита от всеки от двата байта и е 0000011 1100000 = 0x01E0 шестнадесетична = 480 десетична (брой пулсове). Ако предположим, както в предишния пример, че един пулс е равен на 3125 микросекунди, това събитие трябва да бъде изпълнено 480 * 3125 = 1500000 микросекунди или 1,5 секунди след предишното събитие.
След делта времето 0x83 0x60, байтовете 0x26 0x00 трябва да представляват съобщението в MIDI. Тъй като 0x26 не е валиден статусен байт в MIDI, статусният байт на това съобщение явно липсва. Ако това е съобщение, което следва съобщението в по-горния пример, тогава това трябва също да е съобщение "свири нота". Нотата, която трябва се свири тогава е 0x26 (същата, като тази по-горе) и скоростта на тази нота трябва да е 0x00 (нула), което означава, че тази нота ще бъде спряна.
Виж също:
Протокол Musical Instrument Digital Interface (MIDI)
Добави нов коментар