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

7. События

Первые байты (байт 1 или байты с 1 по 4) записи MTrk задают значение времени дельта для первого события в формате величины переменной длины. Следующий за этой величиной байт данных представляет собой первый байт события MIDI. Это байт носит название байта статуса события или байта текущего MIDI-статуса. Для MIDI-событий он представляет собой статус байт данного события. Например, если этот байт равен 0x90, то данное событие — это событие Взять Ноту на 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-события и мета-события.

8. Номер последовательности (записи)

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 представляется в виде значения переменной длины.

Мета-событие Copyright

FF 02 len text

Текстовое мета-событие copyright наиболее удобно помещать в начале MTrk записи

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

Имя последовательности/Имя трека

FF 03 len text

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

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

Инструмент

FF 04 len text

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

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

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

Слова

FF 05 len text

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

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

Маркер

FF 06 len text

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

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

Точка входа Cue Point

FF 07 len text

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

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

Канал MIDI

FF 20 01 cc

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

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

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

Порт MIDI

FF 21 01 pp

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

Спецификация MIDI предусматривает лишь 16 каналов на один входной или выходной порт (устройство, разъем, инструмент — терминология может быть различной) 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 51 03 tt tt tt

Это событие указывает на изменение темпа. 3 байта данных tt tt tt определяют темп в микросекундах в четвертной ноте. Другими словами, значение темпа (мкс) говорит вам, сколько времени должна звучать каждая из "четвертных нот". Если tt tt tt = 07 А1 20, то каждая четвертная нота должна иметь длительность 07 А1 20 (или 500 000) микросекунд. (Проверьте вашим калькулятором Windows в научном режиме). Как правило, музыканты выражают темп как "сумму четвертных нот в каждую минуту (т.е. период времени)". Это полностью противоположно тому, как формат MIDI выражает его. Чтобы преобразовать темп в MIDI формат (BPM - ударов в минуту): BPM = 60000000 / (tt tt tt). Например, темп 120 BPM = 07 А1 20 микросекунд за четвертную ноту. ПРИМЕЧАНИЕ: Если темп не определен вообще, значение по умолчанию 120 BPM предполагается.

SMPTE Offset

FF 54 05 hr mn se fr ff

Назначает SMPTE время начала (часы, минуты, секунды, кадры, субкадры) трека MIDI. (Designates the SMPTE start time (hours, minutes, secs, frames, subframes) of the MIDI track.)

Time Signature

FF 58 04 nn dd cc bb

Time signature is expressed as 4 numbers. • nn and dd represent the "numerator" and "denominator" of the signature as notated on sheet music. The denominator is a negative power of 2: 2 = quarter note, 3 = eighth, etc. • cc expresses the number of MIDI clocks in a metronome click. • bb expresses the number of notated 32nd notes in a MIDI quarter note (24 MIDI clocks). This event allows a program to relate what MIDI thinks of as a quarter, to something entirely different. For example, 6/8 time with a metronome click every 3 eighth notes and 24 clocks per quarter note would be the following event: FF 58 04 06 03 18 08 NOTE: • If no Time Signature is defined, the default value 4/4 is assumed. • Time Signature can only be redefined at measure beginnings.

Key Signature (тональность)

FF 59 02 sf mi

• sf = -7 для 7 бемолей, -1 для 1 бемоля и т.д., 0 для до-мажора или натурального ля-минора, 1 для 1 диеза и т.д. • mi = 0 для мажора, 1 для минора.

Конец трека

FF 2F 00

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

Улучшение звучания MIDI

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

Часто звучание установленного по умолчанию на компьютере «Программного синтезатора» не устраивает пользователя (из-за качества семплов в «банке звуков» синтезатора). Для улучшения звука можно установить другой MIDI-синтезатор с банком лучшего качества, или же использующий отличный от волнового способ формирования звука, например, физический.

Преобразование в MIDI

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

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