Что такое midi в музыке
Первым хитовым форматом файлов в интернете был не MP3, а MIDI
Как нацеленный на профессионалов формат MIDI на короткое, но примечательное время стал основным способом распространения музыки в интернете
Почему-то каждый год, когда на горизонте начинает маячить начало ноября, я вспоминаю композицию November Rain.
Я не большой фанат хард-рока, но это отличная песня, успех которой Guns N’ Roses не смогли превзойти за 27,5 лет, прошедших с тех пор, как она стала самой раскрученной на радио. Это самая длинная песня, попавшая в десятку лучших хитов Billboard Hot 100 – длиннее, чем American Pie. Много лет она была эталоном популярной музыки.
Видеоклип был самым крутым из того, что показывали на MTV – и, несколько десятилетий спустя, стал одним из самых популярных видеоклипов в истории YouTube.
Она длится девять минут. И повествует об опыте длиною в жизнь – если ваша жизнь похожа на жизнь Эксла Роуза.
Но, какой бы она ни была потрясающей, она ещё более удивительна в формате файла MIDI – в таком формате её распространяли в интернете в году этак 1996 – поскольку ему удаётся точно передать дух песни, занимая при этом меньше 50 Кб (в зависимости от вашей звуковой карты).
Сегодня мы вспоминаем слишком краткий период времени, в течение которого MIDI-файлы были значительной частью интернета.
Как браузерные войны помогли популяризации MIDI
В 1981 году несколько заинтересованных в электронной музыке лиц выпустили научную работу, изменившую процесс создания музыки.
В работе был рекомендован «универсальный интерфейс синтезаторов» для музыкальных инструментов, который бы гарантировал возможность переноса музыкальных данных с одного инструмента на другой. Изначально эта технология полагалась на телефонные разъёмы и предназначалась для синтезаторов, но в итоге в 1983 превратилась в цифровой интерфейс музыкальных инструментов, или MIDI [Musical Instrument Digital Interface], совмещающий интерфейсы для оборудования и протокол распространения данных.
Формат MIDI никуда не исчезал – и вообще стал ключевым способом совместного творчества музыкантов за последние 40 лет. Ассоциация производителей MIDI приблизилась к выпуску версии 2.0 – основной вехе для протокола, чей изначальный вариант 1.0 определил современное состояние музыки.
MIDI – база большей части популярной музыки, но в своей истории он редко переходил в такое состояние, в котором им интересовались бы обычные потребители.
Однако был небольшой период времени, когда он достиг огромного успеха у людей, которые бы иначе и не подумали слушать синтезаторную музыку. И причина этого кроется в его размере. По сути, это ведь просто кучка компьютерных данных, нулей и единиц.
MIDI мал. Это сделало его прекрасным форматом для передачи музыки в онлайне – особенно, поскольку к середине 1990-х практически у любого домашнего компьютера, который можно было купить в магазине, была какая-либо звуковая карта.
В поисках дополнительных возможностей два основных разработчика веб-браузеров той эры — Microsoft и Netscape – добавили функциональность, позволявшую использовать аудиофайлы при загрузке сайтов, либо в виде фоновой музыки, либо в виде включаемых страницу файлов со специальным проигрывателем. В любом случае, это был один из ранних примеров плагина, с которым столкнулось большинство – ещё до появления Flash.
В частности, Microsoft Internet Explorer поддерживал его ещё с версии 1.0, а Netscape Navigator поддерживал при помощи плагина, а встроенную поддержку сделал с версии 3.0. Во время пика популярности сайта Geocities был период, когда сайты, загружавшиеся с MIDI-файлами, были обычным делом.
Когда в 2009 году Geocities закрыли, MIDI-файлы с различных сайтов были собраны командой веб-архива. В архиве Internet Archive хранится более 51 000 файлов в коллекции The Geocities MIDI Collection. Список имеющихся там песен – это капсула времени, относящаяся к определённой эре. У вас есть любимая песня из 1998? Поищите её название там без пробелов, и вы, вероятно, её найдёте (я нашёл в архиве не менее семи разных версий November Rain).
Они звучат, как музыкальная капсула времени, и вызывают воспоминания о том периоде у многих веб-сёрферов того времени.
«Даже в эру высококачественных MP3 простенькие звуки MIDI-файлов отзываются в вебе», — писал Дуглас Уолк для журнала Spin в 2000-м, объясняя причину этого: «Их можно играть практически на всём чуть умнее сковородки, а ещё они очень маленькие».
Однако чего у них не было, так это постоянства. Когда MIDI-файлы стали популярными из-за звуковых карт, качество последних очень серьёзно отличалось. Sound Blaster ввёл некую базовую линию, однако гарантии постоянства у MIDI-файлов в конце 90-х не было. Вероятно, что MIDI-файл на безымянной звуковой карточке в дешёвой системе от Packard Bell с б/ушными компонентами звучал не так хорошо, как на Sound Blaster AWE32, настолько максималистской звуковой карте, что у неё были собственные разъёмы для расширения памяти.
MIDI-файлы продаются на дискетах – даже в 2019-м
Стоит отметить, что к моменту появления MIDI-файлов в браузерах их использование в качестве инструмента для распространения контента уже не было чем-то новым. В 1983 году компания Synth-Bank – управляемая Брайаном Беллом, сотрудничавшим с Сантаной и Херби Хэнкоком – первой реализовала идею распространения музыкальных файлов по модему, используя такие ранние онлайн-сервисы, как GE Link и AppleLink. Предполагалось, что сервисом будут пользоваться профессиональные музыканты для облегчения совместной работы.
«Я пытаюсь создать всемирный доступ для звуковиков и конечных пользователей, чтобы они могли работать вместе без проблем, связанных с отсутствием музыкантов, занятостью и поездками, а также с отправкой дисков по почте», — рассказал Белл журналу Network World в 1986.
Были попытки продавать MIDI на коммерческом рынке. Наиболее примечательным было пианино Disklavier от Yamaha, использовавшее дискеты и CD с DRM-защитой для работы с MIDI-файлами. А если вам не нужно было всё пианино, то Roland продавал устройство с динамиком, проигрывавшее файлы MIDI с дискет. Однако ключевая аудитория была такой узкой, а дискеты – такими редкими, что извлечь файлы MIDI вопреки DRM-защите для редактора журнала Hackaday стало по-настоящему трудной задачей.
Как вы можете догадаться, файлы MIDI делались и продавались с той же коммерческой целью, что и обычная музыка – однако их редко настолько тщательно изучали, как их старшего брата, MP3.
Довольно странно думать об этом, но в то время мы могли распространять файлы MIDI пиратским методом, даже не понимая этого.
«Выход стандартных файлов MIDI является работой авторов, подлежащей защите авторских прав, поскольку информация, содержащаяся в файле, заставляет звуковое устройство выдавать музыкальные ноты определённой высоты, тембра, скорости и длительности в определённом порядке, как делает механическое пианино на основе валика с мелодией, или плеер компакт-дисков на основе компакт-диска».
Так писала Шарлотта Дуглас, главный юридический консультант общего совета при Бюро авторского права США в 1996 году в решении о том, что файлы MIDI считаются защищёнными авторским правом. Это решение облегчило задачу лицензирования и обмена файлами MIDI с продюсерами, хотя в онлайне вопрос копирайта был не решён.
MIDI-музыкант, сделавший делом своей жизни сохранение регтайма
Используя эти композиции по мотивам популярных песен в формате MIDI, часто забывают о том, что их делают люди – либо профессионалы для наполнения банка песен (что может пригодиться, например, для караоке), либо дилетанты, пытающиеся воссоздать песни, которые им нравятся, или которые они услышали по радио.
Часто это неизвестные люди, работа которых не связана с музыкой, синтезированной ими в компьютерном формате. Хочу немного рассказать вам об одном из таких людей, поскольку мне кажется, что его жизнь была довольно интересной.
Джон Эдвард Роак, днём работавший фармацевтом, был большим любителем музыки регтайм, и в течении пяти десятилетий играл её на пианино в той или иной форме. Его увлечение регтаймом последовало за ним в мир современных технологий, когда он заинтересовался компьютерами.
В 1980-х он обнаружил первую возможность комбинировать носители посредством инструмента SIDPlayer, позволявшего извлекать музыку из Commodore 64 – включая и обожаемый им регтайм. В то время он начал писать музыку специально для SIDPlayer, и помог привлечь такой интерес к этому формату, что его композиции даже продавало издательство Softdisk, большую известность которому принесло его участие в карьерах разработчиков Doom и Quake.
Commodore, конечно, канул в Лету, но к середине 1990-х Роак открыл для себя MIDI – и вскоре интернет открыл для себя Роака, построившего своё интернет-присутствие благодаря созданию файлов MIDI и распространению дифирамбов регтайму. Его сайт на AOL помог набрать популярности как Роаку, так и регтайму, о котором забыли, когда от него произошли блюз, джаз, кантри и в итоге рок-музыка.
В обзорной статье 1997 года в газете The Baltimore Sun журналист Майкл Химовиц был поражён тем, насколько он увлёкся страстью Роака.
Не знаю, как именно я наткнулся на этот закуток веба – до этого я особенно не интересовался регтаймом. Однако я провёл пару восхитительных часов за прослушиванием музыки Роака, чтением его эссе и изучением ссылок на другие страницы с регтаймом и джазом. Это было чистым откровением.
Затем я вдруг подумал, что мне нужно больше писать о том, что делает веб таким особенным – о возможности заниматься любимым делом. В отличие от всех прочих носителей, существовавших ранее, веб даёт людям с необычными талантами и интересами шанс поделиться своей страстью со аналогичными энтузиастами – и с такими людьми, как я, случайно заглянувшими на огонёк.
Роак отметил, что его интерес к регтаймы идеально подходил для подчёркивания возможностей формата MIDI – в частности потому, что это был стиль музыки, основанный на пианино, то есть, его качество оставалось более-менее постоянным вне зависимости от качества вашей звуковой карты.
«Музыка регтайм хороша потому, что пианино – это и есть пианино, а большинство синтезаторов хорошо его воспроизводят, — рассказал Роак газете. – Но если вы начинаете играться со струнными и басами, то то, что хорошо звучит у вас, не обязательно будет хорошо звучать у меня».
На сайте Роака, работающем до сих пор, есть информативные уроки истории этой музыкальной формы, а также созданные Роаком версии классических песен регтайм, написанных такими титанами этого жанра, как Скотт Джоплин и Джелли Ролл Мортон. Роак месяцами работает над композициями, полагаясь на Sound Blaster AWE32 и пианино от Roland. Единственный минус, который находит во всём этом Роак, состоит в том, что его руки недостаточно велики для того, чтобы как следует играть регтайм.
В каком-то смысле, Роак просто создал личную веб-страничку, посвящённую предмету своей страсти – вместе с моделью распространения, подходящей для его работы. Но в процессе он вышел за пределы этой формы, и хотя он не дорос до бренда, он стал важной частью регтайм-сообщества в конце 90-х, записав два альбома, Syncopated Odyssey и Hot Kumquats при помощи формата MIDI.
Когда в 1999 году он умер – безвременно – он, можно сказать, произвёл революцию в старинной музыке, добавив к ней технологию. Его сайт по сей день остаётся в онлайне, являясь капсулой времени для цифровой личности, вдохновлённой творческими возможностями MIDI.
Для большинства людей выход файлов MIDI в интернет просто означал возможность прослушивать музыку при загрузке веб-страницы, или скачивать музыку, не забивая весь канал. Для Джона Роака он означал способ творить и делиться предметом своей страсти.
Как и многие форматы файлов, файлы MIDI никогда не предполагалось использовать так, как они реально использовались.
И его слава отражала его полезность в тот момент, когда запрос на мультимедийный контент в интернете рос, а возможности компьютеров по предложению его в полновесном формате были ограниченными (дурацкие модемы).
Файл MIDI, даже вырванный из контекста, предлагал неплохой компромисс.
Однако этот период уже окончательно прошёл. Когда я загружал веб-страницы в целях изучения этой темы, они не проигрывали мне файлы MIDI. Вообще. А если они должны были проигрывать музыку, то часто вместо того, чтобы играть в браузере, файлы MIDI просто скачивались на мой компьютер.
В итоге мне удалось заставить их работать при помощи плагина Jazz-Plugin, доступного для большинства популярных браузеров, Firefox, Safari и Chrome.
Это во многих аспектах напоминает мне развитие интернета, оставившую за бортом Gopher, когда-то по умолчанию включённый во многие браузеры, однако удалённый оттуда после выхода протокола из моды.
Популярные браузеры постоянно проделывают подобное – и они уже собрались сделать это с FTP, что разработчики Chrome на полном серьёзе обсуждают уже более пяти лет.
Можно ещё сравнить историю с MIDI с историей HTML-тега blink, точно так же исчезнувшего из браузеров.
Как я уже говорил, MIDI не умер – вовсе нет. Его сила в том, что iPad, поддерживающий MIDI, вполне может обмениваться данными с самыми ранними из поддерживающих MIDI устройств, типа Commodore 64.
Однако было время, когда он был на передних ролях, а не прятался за кулисами. И всё это благодаря уникальному набору требований раннего веба.
А теперь извините, я пойду отрываться под MIDI-версию November Rain. Или какую-нибудь композицию в стиле регтайм. Я пока не определился.
Что такое midi в музыке
MIDI (англ. Musical Instrument Digital Interface — цифровой интерфейс музыкальных инструментов) — стандарт цифровой звукозаписи на формат обмена данными между электронными музыкальными инструментами.
Интерфейс позволяет единообразно кодировать в цифровой форме такие данные как нажатие клавиш, настройку громкости и других акустических параметров, выбор тембра, темпа, тональности и др., с точной привязкой во времени. В системе кодировок присутствует множество свободных команд, которые производители, программисты и пользователи могут использовать по своему усмотрению. Поэтому интерфейс MIDI позволяет, помимо исполнения музыки, синхронизировать управление другим оборудованием, например, осветительным, пиротехническим и т.п.
Последовательность MIDI-команд может быть записана на любой цифровой носитель в виде файла, передана по любым каналам связи. Воспроизводящее устройство или программа называется синтезатором (секвенсором) MIDI и фактически является автоматическим музыкальным инструментом.
Содержание
Стандарт на аппаратуру и программное обеспечение
Описывает аппаратный интерфейс, который позволяет соединять электронные музыкальные инструменты и компьютеры различных производителей, описывает протоколы связи для передачи данных от одного устройства к другому. MIDI-устройства могут взаимодействовать с программными приложениями, используя коммуникационный протокол MIDI. Используя соответствующий программный MIDI-секвенсор, внешние MIDI-устройства могут посылать информацию на синтезатор звуковой карты. MIDI базируется на пакетах данных, каждый из которых соответствует MIDI-событию (англ. MIDI-events ), от нажатия клавиши до простой паузы, эти события разделяются по каналам. Сложная среда MIDI может включать различную аппаратуру, причём каждая часть системы будет отвечать за события на соответствующем канале. Альтернативным вариантом может быть одиночный синтезатор, который сам может управлять всеми каналами.
Формат музыкальных файлов
В отличие от других форматов это не оцифрованный звук, а наборы команд (проигрываемые ноты, ссылки на проигрываемые инструменты, значения изменяемых параметров звука), которые могут воспроизводиться по-разному в зависимости от устройства воспроизведения. Удобство формата MIDI как формата представления данных позволяет реализовывать устройства, производящие автоматическую аранжировку по заданным аккордам, а также приложения 3D-визуализации звука. Кроме того, такие файлы, как правило, имеют на несколько порядков меньший размер, чем оцифрованный звук сравнимого качества.
Стандартный MIDI-файл (SMF — Standard MIDI File) — это специально разработанный формат файлов, предназначенный для хранения данных, записываемых и/или исполняемых секвенсором, секвенсор может быть как программой для компьютера, так и аппаратно выполненным модулем.
В этом формате хранятся стандартные MIDI-сообщения (то есть статус-байты и соответствующие им байты данных), а также временные метки или маркеры для каждого сообщения (то есть последовательности байтов, указывающие, какое количество условных единиц времени (импульсов, тиков) необходимо подождать перед тем, как исполнить следующее событие MIDI). Этот формат позволяет сохранять информацию о темпе, временном разрешении, выраженном в количестве тиков на одну четвертную длительность (или во временных единицах, приходящихся на одну секунду, в формате SMPTE), обозначения размера, информацию о музыкальных ключах, а также хранить названия треков и паттернов. Формат предусматривает возможность сохранения в одном файле нескольких паттернов и треков таким образом, что программы-приложения могут выбирать из всего набора хранимой информации ту, которая будет понятна данному приложению.
Как правило, трек представляет собой аналог музыкальной партии, например партии трубы. Аналогом паттерна может служить весь набор партий, взятых вместе, например совокупность партий трубы, ударных, фортепиано и т. д., которые используются в данном произведении или его части и исполняются одновременно.
Формат разработан таким образом, чтобы любой секвенсор мог читать и записывать такой файл таким образом, чтобы не потерялись его данные, и так, чтобы формат был достаточно гибким, чтобы приложения могли сохранять в файлах свою специфическую информацию, понятную только этим приложениям, но не понятную другим программам-приложениям, причем при загрузке файлов MIDI непонятная другим программам-приложениям информация не приводит к недоразумениям, а просто игнорируется. В этом смысле формат файлов MIDI можно сравнить с файлами, хранящими текстовую информацию. Различные программы-секвенсоры способны читать MIDI-файлы, подобно тому, как различные текстовые редакторы читают ASCII-файлы, которые могут содержать вспомогательную информацию, понятную лишь данному редактору. Но в отличие от ASCII-файлов MIDI-файлы содержат цифровую информацию, и к тому же эта информация сохранена в виде записей, то есть групп байтов, которые содержат свой заголовок, состоящий из идентификатора записи и длины записи. Эти записи могут форматироваться, загружаться, игнорироваться и т. д. независимо друг от друга. Для осуществления работы с записями программы-приложения используют дополнительную информацию, записываемую в MIDI-файл. Например, возможно, программа «захочет» сохранить флаг, указывающий на то, что пользователь установил включенным звук метронома. Программа может вставить этот флаг в MIDI-файл таким образом, что другая программа-приложение сможет пропустить этот флаг без внимания. В будущем, возможно, существующий формат MIDI будет расширен и появятся новые типы записей. Новые программы для работы с MIDI-файлами будут распознавать и новые типы записей. Однако старые MIDI-файлы могут быть воспроизведены в своем исходном виде. Формат MIDI задуман таким образом, что с его расширениями будут совместимы более ранние его версии.
Что такое запись?
Данные всегда хранятся в виде записей. В одном MIDI-файле могут сосуществовать несколько различных записей. Каждая запись может иметь свой собственный размер, то есть количество байтов в различных записях может быть различно. Данные, хранящиеся в одной записи, связаны друг с другом определенным образом. Запись — это по своей сути набор взаимосвязанных байтов.
Каждая запись начинается с указания ее идентификатора, который состоит из четырех букв, то есть из четырех ASCII-байтов. Этот идентификатор указывает, какой тип записи представлен в содержащихся в записи байтах данных. Последующие за идентификатором четыре байта (каждый из которых состоит из 8 бит) образуют 32-битное значение, указывающее длину (или размер) данной записи. Все записи должны начинаться с этих двух полей: идентификатора записи и размера записи. Эти два поля, занимающие всего 8 байт, образуют заголовок записи.
Длина записи не учитывает 8 байт заголовка. Байты длины просто указывают количество байтов в записи, которые следуют за заголовком.
Приведем пример заголовка (здесь байты представлены в шестнадцатеричном виде):
Отметим, что первые четыре байта заголовка образуют MThd (то есть первыми четырьмя байтами заголовка являются ASCII значения букв ‘M’, ‘T’, ‘h’, и ‘d’). Последующие 4 байта говорят нам, что в записи будет еще 6 байтов, следующих за заголовком. После этих шести байтов должен следовать следующий заголовок записи или же конец MIDI-файла.
Фактически все MIDI-файлы начинаются с заголовка MThd и именно этот факт является указанием на то, что мы имеем дело со стандартным MIDI-файлом).
Запись MThd
Запись MThd имеет идентификатор MThd и длину 6 байт.
Рассмотрим подробно эти 6 байтов, следующих за 8-байтным заголовком в MThd записи.
Первые два байта данных содержат информацию о формате или типе MIDI-файла. Существует три различных типа (формата) MIDI-файлов. Тип 0 означает, что файл содержит MIDI-данные, записанные на одном треке, который, вероятно, объединяет в себе все 16 MIDI-каналов. Если ваш секвенсор сохраняет MIDI-данные в одном единственном блоке памяти, из которого он их воспроизводит, то такой секвенсор будет читать и записывать MIDI-данные именно в этот тип MIDI-файлов. Файл типа 1 подразумевает, что в нем содержатся несколько (но возможно и всего один) одновременно воспроизводимых треков, каждый, вероятно, представляет свой собственный MIDI-канал. Все треки начинают воспроизводиться в один и тот же нулевой момент времени. Все треки, взятые вместе, образуют паттерн. Если ваш секвенсор разделяет в памяти различные MIDI-треки и хранит их в различных блоках и воспроизводит различные треки одновременно, то такой секвенсор будет читать и писать файлы типа 1. Файлы типа 2 содержат один или несколько независимых треков, каждый такой трек образует свой собственный паттерн. Если ваш секвенсор разделяет MIDI-данные на несколько блоков в памяти, но воспроизводит лишь один единственный блок в данное время, но не воспроизводит их одновременно, когда каждый блок памяти содержит отдельную пьесу или ее кусок, то этот секвенсор будет читать и записывать MIDI-файлы второго типа.
Следующие два байта определяют количество треков, хранимых в файле, эти два байта обозначаются NumTracks. Естественно, что для файлов типа 0 значение NumTracks всегда равно 1. Для двух оставшихся типов возможны другие значения.
Оставшиеся два байта указывают величину временного разрешения, то есть количество временных импульсов (временных тиков), приходящихся на одну четвертную длительность, что в виде аббревиатуры английских слов обозначается как PPQN. Например, если ваш секвенвер использует 96 ppqn, то соответствующее поле в заголовке записи будет иметь шестнадцатеричное значение 00 60.
Напротив, если первый байт рассматриваемого поля заголовка отрицателен, то соответствующий формат использует стандарт SMPTE вместо стандарта PPQT. В этом случае первый байт поля временного разрешения принимает значения −24, −25, −29 или −30, что соответствует четырем стандартным типам в стандарте SMPTE. Второй байт (положительная величина) указывает величину разрешения во фрейме. Стандартные величины разрешения фрейма представляют собой 4 (временной код MIDI), 8, 10, 80 (SMPTE) или 100.
Задавая значения фреймов −25 и величину внутрифреймового разрешения 40, можно установить значение временного разрешения длительностью в миллисекунду.
Ниже приводится пример целой записи типа MThd, включая ее заголовок:
Запись MTrk
За записью MThd следует MTrk запись. Это единственный тип записи, отличающийся от MThd записи, который определен для MIDI-файлов в настоящее время. Если по какой-либо причине в файле содержится идентификатор какой-либо записи другого типа, то, вероятно, эта запись создана для какой-либо другой программы, и эта запись должна быть проигнорирована в соответствии с указанной в ее заголовке длиной данной записи.
MTrk запись содержит в себе MIDI-данные и байты временных меток, а также необязательную информацию. Эти данные относятся к одному треку. Очевидно, что количество MTrk записей в файле должно совпадать со значением NumTracks, указанном в записи MThd.
Заголовок записи MTrk начинается с идентификатора записи, который представляет собой четыре ASCII-байта ‘M’, ‘T’, ‘r’, ‘k’, за которым следует значение длины записи, то есть число, равное количеству байтов в данной записи. Для различных треков значения длин MTrk записей могут быть различны. (Например, трек, содержащий партию скрипки из Концерта Баха, по всей видимости будет содержать больше данных, чем трек, содержащий басовую партию, в которой на один такт приходится лишь две ноты.)
Величины переменной длины — Временные метки событий
Трек в MIDI-файле аналогичен треку в MIDI-секвенсоре. Трек секвенсора содержит последовательность событий. Например, первым событием может быть взятие ноты «до» первой октавы. Вторым событием может быть взятие ноты «ми» терцией выше. Эти два события могут произойти в одно и то же время. Третьим событием может быть снятие ноты «до». Это событие может произойти несколькими долями позже после первого события (то есть звук «до» будет снят спустя несколько долей после того, как он был взят). Для каждого события указывается его время, именно в этот момент времени событие происходит. Все события организованы в пределах одной записи в памяти секвенсора в порядке их появления во времени.
В MIDI-файле время события указывается перед байтами данных, которые описывают само событие. Иными словами, временна́я метка события предшествует описанию события. Например, если первое событие происходит спустя 4 временных интервала (временной интервал устанавливается в MThd записи) после начала воспроизведения, то соответствующее ему значение «дельта» — значение промежутка времени — устанавливается равным 04. Если следующее событие происходит одновременно с этим первым событием, то значение его времении дельта равно 00. Таким образом, время дельта — это длительность, выраженная в элементарных временных интервалах, между данным событием и ему предшествующим событием.
Поскольку предполагается, что все треки начинают воспроизводиться с момента времени равного 0, то время дельта первого события становится равным 0.
Значения времен дельта хранятся в виде последовательностей байтов, которые носят название величин переменной длины. Лишь первые 7 бит каждого байта являются значимыми для определения дельта времени. Если время дельта выражено в виде набора 32 бит, то необходимо распаковать эту 4-байтовую величину, выделив последовательность четырех 7-битных значимых байтов (наподобие того, как это делается для передачи SYSEX сообщений в рамках протокола MIDI). В зависимости от величины времени дельта, количество байтов может быть различным. Для того, чтобы отметить последний байт в последовательности этих байтов, необходимо оставить 7-ой бит этого последнего байта чистым (старший бит равен 0). Так, если время дельта находится в пределах от 0 до 127, то оно может быть выражено одним единственным байтом. Самое большое время дельта устанавливается в размере 0FFFFFFF, для записи такого времени потребуется величина переменной длины размером 4 байта. Так могут выглядеть величины переменной длины для разных значений времен дельта (время дельта выражено в виде 32-битного значения):
Время дельта Соответствующая величина переменной длины
Отметим, что использование значений переменной длины, то есть разбиение большой величины на последовательность байтов, не ограничивается случаем с временами дельта. Значения переменный длины используются в MIDI-файлах и в других случаях.
События
Первые байты (байт 1 или байты с 1 по 4) записи MTrk задают значение времени дельта для первого события в формате величины переменной длины. Следующий за этой величиной байт данных представляет собой первый байт события MIDI. Это байт носит название байта статуса события или байта текущего MIDI-статуса. Для MIDI-событий он представляет собой статус байт данного события. Например, если этот байт равен 0x90, то данное событие — это событие Взять Ноту на MIDI-канале 0. Или, если этот байт равен 0x23, то необходимо обратиться к статус байту предыдущего события. Очевидно, что первое MIDI-событие в MTrk записи обязательно должно содержать в себе статус байт. После статус байта следуют один или два байта данных, в зависимости от типа события. После этих байтов данных находится следующее значение времени дельта (в виде величины переменной длины), и начинается процесс прочтения следующего события.
Особый случай представляют собой сообщения SYSEX, имеющие статус байт, равный F0. События SYSEX могут иметь любую длину. После статус байта F0 следует последовательность значений переменной длины. Можно получить 32-битовое значение, которое равно количеству следующих далее байтов, образующих SYSEX-событие. Эта длина не включает в себя статус байт (F0).
Рассмотрим в качестве примера следующее SYSEX-событие MIDI:
В MIDI-файле такое событие будет сохранено в виде следующей последовательности байтов (исключая время дельта, предшествующее событию):
Статус байт FF зарезервирован для использования в качестве статуса события, не являющегося MIDI-событием. За байтом FF следует другой байт, указывающий какой тип не-MIDI события описывается в данном событии. Это своеобразный второй статус байт. За этим байтом следует величина переменной длины, которая показывает, какое количество байтов содержится в данном событии. то есть задает длину события. Длина не включает в себя начальный статус байт FF, байт типа события, байты длины события. Это особое сообщение, не принадлежащее протоколу MIDI, носит название мета-события. Ниже описаны некоторые мета-события. Если не указано обратное, в записи MTrk может быть размещено более одного мета-события, причем одно и то же мета-событие может быть размещено в одной записи более одного раза. Мета-события могут иметь произвольные временные метки (времена дельта). Как и все MIDI-события, мета-события имеют дельта времена (временные метки), которые указывают промежуток времени, разделяющий данное MIDI-событие или мета-событие от предшествующего, независимо от того, является это событие MIDI-событием или мета-событием. Таким образом, мы можем произвольно смешивать MIDI-события и мета-события.
Номер последовательности (записи)
Это необязательное мета-событие должно находиться в самом начале MTrk записи перед первой ненулевой временной меткой или перед первым событием. Это мета-событие устанавливает номер последовательности (номер записи) Два байта данных ss ss соответствуют данным в MIDI-сообщении MIDI Cue. В MIDI-файлах второго типа эти числа определяют номера каждого паттерна (или MTrk записи) таким образом, что последовательность пьес, содержащихся в файле может быть управляема при помощи сообщения MIDI Cue/ Если байты ss ss опущены (длина данного мета-сообщения равна 0 вместо 2), то номера MTrk записей устанавливаются в порядке того, как они записаны в файле (первая MTrk соответствует первому треку и т. д.) Файлы нулевого и первого типов, которые содержат единственный паттерн могут содержать мета-сообщение номера последовательности только в первой MTrk записи. Несколько Файлов первого типа, содержащих различные номера последовательностей могут рассматриваться как коллекции независимых пьес.
Можно использовать только одно мета-сообщение номера последовательности для каждого MTrk записи в файле формата 2. Можно использовать только одно мета-сообщение номера последовательности в файле формата 0 им формата 1, и это мета-сообщение должно находиться в первой MTrk записи.
Текст
Это мета-событие содержит любой объем текста любого назначения. Значение len содержит длину текстового сообщения в байтах. Наиболее удобно помещать такие мета-сообщения в начале MTrk записи. Несмотря на то, что записываемый текст может быть использован в любых целях, необходимо иметь в виду, что предусмотрены также и иные текстовые мета-сообщения, которые специально предназначены для указания инструментов оркестра, слов песен, названий треков и другие. Данное мета-событие главным образом предназначено для добавления комментариев к MIDI-файлу, предполагается, что при загрузке файлов эти комментарии будут проигнорированы.
Отметим, что величина len представляется в виде значения переменной длины.
Мета-событие Copyright
Текстовое мета-событие copyright наиболее удобно помещать в начале MTrk записи
Отметим, что величина len представляется в виде значения переменной длины.
Имя последовательности/Имя трека
Текстовое мета-событие, содержащее название MIDI-последовательности или трека. Удобно располагать это мета-событие в начале MTrk записи.
Отметим, что величина len представляется в виде значения переменной длины.
Инструмент
Текстовое мета-событие, содержащее название инструмента, исполняющего данный трек. Название инструмента может отличаться от названия самого трека. Например, название трека может быть, скажем, «Ария Ленского», а название инструмента может указывать на голос и содержать значение «Тенор».
Наиболее удобно располагать одно или несколько мета-событий подобного типа в самом начале MTrk записи, поскольку эти события несут вспомогательную информацию, которая информирует пользователя о том, какой инструмент исполняет данный трек, а также сообщают другие полезные данные. Обычно реальные параметры, задающие тип инструмента, исполняющего трек, хранятся в файле в виде MIDI-событий типа MIDI Program Change, а описанные здесь мета-события позволяют снабдить пользователя удобно читаемыми описаниями, соответствующими сделанным в MTrk записях конфигурациям.
Отметим, что величина len представляется в виде значения переменной длины.
Слова
Текстовое мета-событие, содержащее слова вокального произведения, приходящиеся на ту или иную музыкальную долю. Одно мета-событие «Слова» должно содержать один единственный слог текста.
Отметим, что величина len представляется в виде значения переменной длины.
Маркер
Текстовое мета-событие Маркер устанавливается на определенной музыкальной доле. Это событие может использоваться для организации петель и может обозначать начальную и конечную точку петли.
Отметим, что величина len представляется в виде значения переменной длины.
Точка входа Cue Point
Текстовое мета-событие «точка входа» может использоваться для обозначения точки входа внешнего потока данных, например точки начала воспроизведения файла с цифровым звуком. Текстовое значение данного мета-события может содержать имя WAV файла, содержащего цифровой звук.
Отметим, что величина len представляется в виде значения переменной длины.
Канал MIDI
Это необязательное мета-событие обычно располагается в начале MTrk сообщения перед первой ненулевой временной меткой и перед первым мета-событием, исключая мета-событие номера последовательности. Мета-событие «канал MIDI» устанавливает значение MIDI-канала с которым будут связаны все последующие мета-события и события SYSEX. Байт данных cc — это номер MIDI-канала, величине 0 соответствует первый канал.
Спецификация MIDI не предусматривает указание номера канала для SYSEX событий и мета-событий. Если создается файл типа 0, то все SYSEX события и мета-события находятся на одном треке и затруднительно распределить эти события между соответствующими канальными (голосовыми) сообщениями (например, если вы хотите обозначить партию канала 1 как «Флейта соло», а партию канала 2 как «Труба соло», то вам придется использовать два мета-события «Имя трека» для введения этих названий, но поскольку оба этих трека расположены на одном канале, то перед первым мета-сообщением имени трека необходимо поместить мета-сообщение «канал MIDI», в котором указать номер соответствующего канала, а перед вторым мета-сообщением имени трека поместить мета-сообщение канала MIDI с указанием номера второго канала.
На одном MIDI-треке можно использовать более одного мета-сообщения «канал MIDI», если события этого трека нужно распределить между несколькими каналами MIDI.
Порт MIDI
Это необязательное событие, которое как правило располагается в начале записи 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-порта в определенный момент времени.
Конец трека
Это событие является обязательным. Оно обязано быть последним событием каждой MTrk записи. Оно представляет собой явное обозначение конца MTrk записи. Допускается использование единственного мета-события «Конец трека» для каждой MTrk записи.
Улучшение звучания MIDI
Файлы MIDI являются набором команд для синтезатора (секвенсора), установленного на компьютере, но не несут в себе готовых для воспроизведения аудиоданных.
Часто, звучание установленного по умолчанию на компьютере «Программного синтезатора» не устраивает пользователя (из-за качества семплов в «банке звуков» синтезатора). Для улучшения звука можно установить другой MIDI синтезатор с банком большего качества или же использующий отличный от волнового способа формирования звука, например, физический.
Преобразование в MIDI
Для преобразования музыкальных записей в команды MIDI существуют различные программы. В качестве исходных могут использоваться как wave-файлы, так и файлы формата MP3, дорожки Audio CD, а также непосредственно поступающий с микрофона звук без записи его в файл. Некоторые программы умеют распознавать полифоническую музыку, то есть содержащую много голосов. Для улучшения качества распознавания в некоторых программах можно использовать встроенный нотный редактор.