Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц_4_MM.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
301.57 Кб
Скачать

2.1.3.События

Первые байты (байт 1 или байты с 1 по 4) записи MTrk задают значение времени дельта для первого события в формате величины переменной длины. Следующий за этой величиной байт данных представляет собой первый байт события MIDI. Это байт носит название байта статуса события или байта текущего MIDI статуса. Для MIDI событий он представляет собой статус байт данного события. Например, если этот байт равен 0x90, то данное событие v это событие Взять Ноту на MIDI канале 0. Или, если этот байт равен 0x23, то необходимо обратиться к статус байту предыдущего события. Очевидно, что первое MIDI событие в MTrk записи обязательно должно содержать в себе статус байт. После статус байта следуют один или два байта данных, в зависимости от типа события. После этих байтов данных находится следующее значение времени дельта ( в виде величины переменной длины), и начинается процесс прочтения следующего события.

Особый случай представляют собой сообщения SYSEX, имеющие статус байт, равный F0. События SYSEX могут иметь любую длину. После статус байта F0 следует последовательность значений переменной длины. Можно получить 32-битовое значение, которое равно количеству следующих далее байтов, образующих SYSEX событие. Эта длина не включает в себя статус байт (F0).

Рассмотрим в качестве примера следующее SYSEX событие MIDI:

F0 7F 7F 04 01 7F 7F F7

В MIDI файле такое событие будет сохранено в виде следующей последовательности байтов (исключая время дельта, предшествующее событию):

F0 07 7F 7F 04 01 7F 7F F7

Статус байт FF зарезервирован для использования в качестве статуса события, не являющегося MIDI-событием. За байтом FF следует другой байт, указывающий какой тип не-MIDI события описывается в данном событии. Это своеобразный второй статус байт. За этим байтом следует величина переменной длины, которая показывает, какое количество байтов содержится в данном событии. т.е. задает длину события. Длина не включает в себя начальный статус байт FF, байт типа события, байты длины события. Это особое сообщение, не принадлежащее протоколу MIDI, носит название мета-события. Ниже описаны некоторые мета-события. Если не указано обратное, в записи MTrk может быть размещено более одного мета-события, причем одно и то же мета-событие может быть размещено в одной записи более одного раза. Мета-события могут иметь произвольные временные метки (времена дельта). Как и все MIDI события, мета-события имеют дельта времена (временные метки), которые указывают промежуток времени, разделяющий данное MIDI событие или мета-событие от предшествующего, независимо от того, является это событие MIDI-событием или мета-событием. Таким образом, мы можем смешивать MIDI события и мета-события произвольным образом.

Номер последовательности (записи) FF 00 02 ss ss

Это необязательное мета-событие должно находиться в самом начале MTrk записи перед первой ненулевой временной меткой или перед первым событием. Это мета-событие устанавливает номер последовательности (номер записи) Два байта данных ss ss соответствуют данным в MIDI сообщении MIDI Cue. В MIDI файлах второго типа эти числа определяют номера каждого паттерна (или MTrk записи) таким образом, что последовательность пьес, содержащихся в файле может быть управляема при помощи сообщения MIDI Cue/ Если байты ss ss опущены (длина данного мета-сообщения равна 0 вместо 2), то номера MTrk записей устанавливаются в порядке того, как они записаны в файле (первая MTrk соответствует первому треку и т.д.) Файлы нулевого и первого типов, которые содержат единственный паттерн могут содержать мета-сообщение номера последовательности только в первой MTrk записи. Несколько Файлов первого типа, содержащих различные номера последовательностей могут рассматриваться как коллекции независимых пьес.

Можно использовать только одно мета-сообщение номера последовательности для каждого MTrk записи в файле формата 2. Модно использовать только одно мета-сообщение номера последовательности в файле формата 0 им формата 1, и это мета-сообщение должно находиться в первой MTrk записи.

Текст FF 01 len text

Это мета-событие содержит любой объем текста любого назначения. Значение len содержит длину текстового сообщения в байтах. Наиболее удобно помещать такие мета-сообщения в начале MTrk записи. Несмотря на то, что записываемый текст может быть использован в любых целях, необходимо иметь в виду, что предусмотрены также и иные текстовые мета-сообщения, которые специально предназначены для указания инструментов оркестра, слов песен, названий трэков и другие. Данное мета-событие главным образом предназначено для добавления комментариев к MIDI файлу, предполагается, что при загрузке файлов эти комментарии будут проигнорированы.

Отметим, что величина len представляется в виде значения переменной длины.

Мета-событие FF 02 len text.

Текстовое мета-событие copyright наиболее удобно помещать в начале MTrk записи. Отметим, что величина len представляется в виде значения переменной длины.

Имя последовательности/Имя трека FF 03 len text.

Текстовое мета-событие, содержащее название MIDI последовательности или трека. Удобно располагать это мета-событие в начале MTrk записи.

Инструмент FF 04 len text

Текстовое мета-событие, содержащее название инструмента, исполняющего данный трэк. Название инструмента может отличаться от названия самого трека. Например, название трека может быть, скажем, "Ария Ленского", а название инструмента может указывать на голос и содержать значение "Тенор".

Наиболее удобно располагать одно или несколько мета-событий подобного типа в самом начале MTrk записи, поскольку эти события несут вспомогательную информацию, которая информирует пользователя о том, какой инструмент исполняет данный трек, а также сообщают другие полезные данные. Обычно реальные параметры, задающие тип инструмента, исполняющего трек, хранятся в файле в виде MIDI-событий типа MIDI Program Change, а описанные здесь мета-события позволяют снабдить пользователя удобно читаемыми описаниями, соответствующими сделанным в MTrk записях конфигурациям.

Слова FF 05 len text

Текстовое мета-событие, содержащее слова вокального произведения, приходящиеся на ту или иную музыкальную долю. Одно мета-событие "Слова" должно содержать один единственный слог текста.

Маркер FF 06 len text

Текстовое мета-событие Маркер устанавливается на определенной музыкальной доле. Это событие может использоваться для организации петель и может обозначать начальную и конечную точку петли.

Точка входа Cue Point FF 07 len text

Текстовое мета-событие "точка входа" может использоваться для обозначения точки входа внешнего потока данных, например точки начала воспроизведения файла с цифровым звуком. Текстовое значение данного мета-события может содержать имя WAV файла, содержащего цифровой звук.

Канал MIDI FF 20 01 cc

Это необязательное мета-событие обычно располагается в начале MTrk сообщения перед первой ненулевой временной меткой и перед первым мета-событием, исключая мета-событие номера последовательности. Мета-событие "канал MIDI" устанавливает значение MIDI канала с которым будут связаны все последующие мета-события и события SYSEX. Байт данных cc v это номер MIDI канала, величине 0 соответствует первый канал.

Спецификация MIDI не предусматривает указание номера канала для SYSEX событий и мета-событий. Если создается файл типа 0, то все SYESX события и мета-события находятся на одном треке и затруднительно распределить эти события между соответствующими канальными (голосовыми) сообщениями (например, если вы хотите обозначить партию канала 1 как "Флейта соло", а партию канала 2 как "Труба соло", то вам придется использовать два мета-события "Имя трека" для введения этих названий, но поскольку оба этих трека расположены на одном канале, то перед первым мета-сообщением имени трека необходимо поместить мета-сообщение "канал MIDI", в котором указать номер соответствующего канала, а перед вторым мета-сообщением имени трека поместить мета-сообщение канала MIDI с указанием номера второго канала.

На одном MIDI треке можно использовать более одного мета-сообщения "канал MIDI", если события этого трека нужно распределить между несколькими каналами MIDI.

Порт MIDI FF 21 01 pp

Это необязательное событие, которое как правило располагается в начале я MTrk записи перед первым ненулевым временем дельта и перед первым MIDI событием, которое определяет, с каким MIDI портом (или устройством) связаны события данного MTrk сообщения. Байт данных pp v это номер порта, нулевому значению pp соответствует первое MIDI устройство в системе.

Спецификация MIDI предусматривает лишь 16 каналов на один входной или выходной порт (устройство, разъем, инструмент v терминология может быть различной) MIDI. Номер MIDI канала каждого события MIDI содержится в статус байте события, где он занимает четыре младших бита. Таким образом, номер канала всегда представляет собой число в пределах от 0 до 15. Иногда система позволяет осуществлять работу более чем с 16 каналами MIDI, возникает необходимость преодолеть ограничения, накладываемые малым количеством каналов MIDI, и расширить возможности обмена MIDI данными, сделать обмен информацией со внешними MIDI устройствами более эффективным, т.е. позволить музыканту работать более чем с 16 каналами. Некоторые секвенсоры также позволяют осуществлять работу более чем с 16 MIDI каналами на входе и выходе одновременно. К сожалению, протокол MIDI не предусматривает возможность использования более чем 16 MIDI каналов в рамках статус байта в событии MIDI. Поэтому необходим дополнительный метод, который позволяет различать события, которые соответствуют первому каналу на первом MIDI порте от событий, соответствующих, скажем, первому каналу на втором MIDI порте. Описываемой мета-событие позволяет секвенсору определить на какой MIDI порт посылать события данного MTrk сообщения.

Допускается располагать более одного мета-события "Порт MIDI" в пределах одного MIDI трека, если требуется изменить значение MIDI порта в определенный момент времени.

Конец трека FF 2F 00

Это событие является обязательным. Оно обязано быть последним событием каждой MTrk записи. Оно представляет собой явное обозначение конца MTrk записи. Допускается использование единственного мета-события "Конец трека" для каждой MTrk записи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]