Мета-события
Sequence Number (0x00). Это необязательное мета-событие имеет структуру, показанную на рис. 20. Оно задает номер секвенции (паттерна), на который можно ссылаться в дальнейшем при помощи сообщений MIDI Cueing. В таком виде это мета-событие имеет смысл только для формата 2, поскольку в файлах формата 0 и 1 есть только одна секвенция (то есть целая композиция). Событие должно располагаться в начале трека, перед любым событием с ненулевым дельта-временем, и перед любым другим MIDI-событием. Если номер секвенции опущен, то считается, что секвенции (паттерны) следуют в порядке расположения блоков трека в файле. Если необходимо сохранить несколько многотрековых композиций в виде группы файлов формата 0 или 1, то событие Sequence Number может использоваться в качестве номера файла.
Copyright Notice (0x02). Содержит заметку об авторских правах. Заметка должна содержать символы "(", "C" и ")", год и владельца авторских прав. Если в одном файле содержатся несколько произведений, все заметки об авторских правах должны быть размещены в начале файла. Заметка должна быть первым событием в первом блоке трека в момент времени 0. Sequence/Track Name (0x03). Содержит название произведения (если находится в файле формата 0 или в первом блоке трека в файле формата 1), в остальных случаях — название трека. Instrument Name (0x04). Содержит название инструмента, которым должен исполняться трек. Lyric (0x05). Задает слова песни, которые должны быть исполнены в указанное время. Обычно каждый слог представлен отдельным событием Lyric, то есть для каждого слога четко задано время исполнения. В 1997 году организация MMA расширила это событие, добавив команды форматирования при выводе текста на экран, поддержку многобайтовой кодировки символов и Unicode, а также информацию о произведении (название, композитор, исполнитель). Расширенное мета-событие Lyric предложено называть Lyric/Display Meta Event. Marker (0x06). Событие располагается обычно на первом блоке трека в файле формата 1 (или на единственном треке формата 0). Определяет позицию внутри произведения и одновременно задает ее имя. Cue Point (0x07). Задает точку привязки партитуры к моменту кино-, видео- или сценического действия и одновременно описание момента (например, "Машина въехала в дерево", "Герой получил пощечину"). Program Name (0x08). Это мета-событие служит для визуальной ориентировки и информирования пользователя об используемом имени пэтча на данном канале. Непосредственно за этим событием должны следовать события Bank Select и Program Change, посредством которым реально выбирается пэтч. Если на протяжении звучания трека на том же MIDI-канале изменяется пэтч, событие Program Name может встречаться перед каждым таким изменением. Device Name (0x09). Это мета-событие позволяет в одном MIDI-файле задать несколько устройств воспроизведения (тон-генераторов), то есть реализовать более 16 MIDI-каналов. Например, в аранжировке могут быть задействованы два тон-генератора, первый подключен к порту "MIDI Out 3" интерфейса, второй — к порту "MIDI Out 4" (такое имя портам присвоила операционная система). Выход одного трека направлен на пятый MIDI-канал порта "MIDI Out 3", выход другого — также на пятый MIDI-канал, но порта "MIDI Out 4". Тогда в SMF формата 1 будут сохранены два блока треков, в каждом из которых события будут происходить на пятом канале, но у треков будет разное мета-событие Device Name ("MIDI Out 3" и "MIDI Out 4" соответственно). Имя устройства можно задавать произвольно, ориентируясь на текущее оборудование и способ его подключения. При работе на одном компьютере с одним набором и способом коммутации внешних устройств событие Device Name со своей задачей справляется прекрасно. Но стоит загрузить полученный MIDI-файл на компьютер, оснащенный другими устройствами, названия устройств из файла окажутся бесполезными (остается только рассчитывать на интеллектуальные способности секвенсора, который по названию устройств сможет "догадаться" о том, на какой синтезатор лучше направить выход с трека). Событие Device Name должно присутствовать только один раз, в самом начале трека, перед любыми MIDI-событиями. Таким образом, файл формата 0 может иметь только одно устройство воспроизведения. MIDI Channel Prefix (0x20). Структура события показана на рис. 22. Поскольку SysEx-события и мета-события не содержат в статус-байте номер MIDI-канала, нужен способ привязки этих событий к MIDI-каналу. Событие MIDI Channel Prefix содержит номер MIDI-канала, с которым ассоциируются все последующие SysEx- и мета-события. Канал, заданный таким образом, остается действительным до следующего нормального MIDI-события (которое содержит номер канала) или до следующего мета-события MIDI Channel Prefix.
End of Track. (0x2F). Это обязательное мета-событие (рис. 23) указывает момент окончания трека. Должно быть последним событием внутри блока трека. Точный момент окончания трека необходим секвенсорам для возможности воспроизведения трека в цикле или стыковки его с другим треком.
Для преобразования дельта-времени в миллисекунды необходимы два блока информации: количество тиков в четверти и текущий темп (обычно задан соответствующим мета-событием в треке темпа/размера). Темп выражается в микросекундах на четверть (т. е. 500000 мкс соответствуют темпу 120 BPM, так как 120 BPM — это одна четверть в 0,5 с). Для преобразования дельта-времени в миллисекунды используется следующая формула:
В реальной жизни SMF может содержать изменения темпа и размера, так что поиск расчетного времени для каждого тика оказывается непростой задачей. SMPTE Offset (0x54). Структура показана на рис. 26. Это необязательное мета-событие задает время SMPTE, с которого начинается трек. Событие должно располагаться в начале трека, перед любым другим событием с ненулевым дельта-временем, и перед любым MIDI-событием. В файле формата 1 смещение SMPTE должно храниться с картой темпа на первом треке. Поле ff содержит сотые доли кадра, даже в том случае, если в блоке заголовка определено другое количество тиков на кадр.
Появление стандартных MIDI-файлов привело к развитию целой индустрии караоке — специальных программ-проигрывателей, отображающих тексты песен синхронно с инструментальной версией композиции, воспроизводимой синтезатором звуковой платы. В большинстве своем файлы для караоке имеют расширение KAR и представляют собой самые обыкновенные MIDI-файлы с добавленным "подстрочником". Это означает, что если вы наткнулись на подобный файл, но в системе не установлен караоке-плеер, достаточно изменить расширение KAR на MID, и вы получите стандартный MIDI-файл. Расширение KAR впервые применила известная компания Tune 1000 Corp (www.tune1000.co.uk), которая сегодня является признанным лидером в индустрии караоке и продает десятки тысяч файлов любителям "попеть в микрофон". Особенность файлов KAR — слова песни в них хранятся не в мета-событиях Lyric, а в текстовых событиях общего назначения (Text Meta Event). Существуют и другие караоке-форматы, такие как TXK, CRT, ST3, TAB. Они содержат, наряду со звуком и текстом, графику и даже гитарные табулатуры. Естественно, ни о какой совместимости с SMF в этом случае речи не идет, хотя внутри себя такие файлы могут скрывать SMF в чистом виде.
|