MIDI ( — «цифровой интерфейс музыкальных инструментов») — стандарт цифровой звукозаписи на формат обмена данными (интерфейс) между электронными музыкальными инструментами.

Интерфейс позволяет единообразно кодировать в цифровой форме такие данные как нажатие клавиш, настройку громкости и других акустических параметров, выбор тембра, темпа, тональности и др., с точной привязкой во времени. В системе кодировок присутствует множество свободных команд, которые производители, программисты и пользователи могут использовать по своему усмотрению. Поэтому интерфейс MIDI позволяет, помимо исполнения музыки, синхронизировать управление другим оборудованием, например, осветительным, пиротехническим и т. п.

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

История К концу 1970-х годов получили распространение музыкальные синтезаторы. Они представляли собой наборы генераторов звуковых частот, управляемых напряжением. Нажатие клавиши на клавиатуре синтезатора включало генератор, частота которого задавалась напряжением от регулятора тональности данной клавиши. Количество отдельных генераторов определяло количество тонов синтезатора, которые могут звучать одновременно. Конкретные модели синтезаторов могли иметь особенности звучания и характерные специальные эффекты. Реализовать управление всей гаммой потенциальных возможностей синтеза звука в рамках одного аналогового устройства было невозможно. Рабочее место музыканта того времени могло состоять из нескольких разнородных синтезаторов; работать с таким "зоопарком" было сложно. В начале 80-х годов необходимость увеличения гибкости управления разнородными синтезаторами стала очевидной, а развитие электроники подсказало путь решения проблемы: цифровое программное управление. Компании-производители синтезаторов удачно смогли договориться о разработке и поддержке единого стандарта на интерфейс управления синтезаторами, который и появился в 1982 году. Идеология стандарта подразумевала разделение органов управления и аппаратуры синтеза звука. Интерфейс MIDI фактически стал средством передачи положения клавиш и регуляторов от музыкальной клавиатуры к аппаратуре синтеза звука. Теперь музыкант мог с одной клавиатуры управлять несколькими синтезаторами разных типов и фирм-изготовителей. Более того, цифровой формат передачи позволил дополнить аппаратуру секвенсорами — устройствами, запоминающими наигранную мелодию. Теперь музыкант мог записывать композиции или их части, микшировать без потери качества звука и использования сложных студийных магнитофонов того времени. Стандарт быстро завоевал популярность. Постепенно дополняясь новыми возможностями, он не потерял актуальности и в наше время.

Стандарт на аппаратуру и программное обеспечение

Физический уровень интерфейса представляет собой токовую петлю (что обеспечивает гальваническую развязку и безопасность при соединении устройств между собой). Передатчик активный, 5 мА, наличие тока обозначает 0, нет тока — 1. Разъём 5-штырьковый DIN 41524. Приёмопередатчик асинхронный, скорость 31250 бит/с, формат 8-N-1.

Устройства соединяются кабелями. Выход данных ведущего устройства (разъём MIDI OUT) соединяется со входом ведомого устройства (разъёмом MIDI IN). Данные по кабелю передаются только в одном направлении, от ведущего устройства к ведомому (например, от музыкальной клавиатуры к синтезатору). Для двусторонней передачи данных требуется второй кабель.

Большая часть MIDI-устройств не копируют сообщения с входного на выходной разъём. Существует третий тип разъёма (MIDI THRU), на котором дублируется поток данных со входа. Этот тип разъёма позволяет соединить в цепочку произвольное количество синтезаторов. Однако такой тип разъёма есть не у всех синтезаторов. Кроме того, MIDI-устройства могут объединяться с помощью устройств MIDI thru box (хабов), которые ретранслируют входной сигнал на несколько выходов.

Стандарт описывает аппаратный интерфейс, который позволяет соединять электронные музыкальные инструменты и компьютеры различных производителей, описывает протоколы связи для передачи данных от одного устройства к другому. MIDI-устройства могут взаимодействовать с программными приложениями, используя коммуникационный протокол MIDI. Используя соответствующий программный MIDI-секвенсор, внешние MIDI-устройства могут посылать информацию на синтезатор звуковой карты. MIDI базируется на пакетах данных, каждый из которых соответствует MIDI-событию (), от нажатия клавиши до простой паузы, эти события разделяются по каналам. Сложная среда 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 байт заголовка. Байты длины просто указывают количество байтов в записи, которые следуют за заголовком.

Приведём пример заголовка (здесь байты представлены в шестнадцатеричном виде):

4D 54 68 64 00 00 00 06

Отметим, что первые четыре байта заголовка образуют MThd (то есть первыми четырьмя байтами заголовка являются ASCII значения букв 'M', 'T', 'h', и 'd'). Последующие 4 байта говорят нам, что в записи будет ещё 6 байтов, следующих за заголовком. После этих шести байтов должен следовать следующий заголовок записи или же конец MIDI-файла.

Фактически все MIDI-файлы начинаются с заголовка MThd, и именно этот факт является указанием на то, что мы имеем дело со стандартным MIDI-файлом.

Запись MThd Запись MThd имеет длину 6 байт и следует за идентификатором MThd и 32 битным числом (00 00 00 06).

Рассмотрим подробно эти 6 байтов, следующих за 8-байтным заголовком в MThd записи.

Первые два байта данных содержат информацию о формате или типе MIDI-файла. Существует три различных типа (формата) MIDI-файлов: Тип 0 означает, что файл содержит MIDI-данные, записанные на одном треке, который, вероятно, объединяет в себе все 16 MIDI-каналов. Если ваш секвенсор сохраняет MIDI-данные в одном единственном блоке памяти, из которого он их воспроизводит, то такой секвенсор будет читать и записывать MIDI-данные именно в этот тип MIDI-файлов. Файл типа 1 подразумевает, что в нём содержатся несколько (но, возможно, и всего один) одновременно воспроизводимых треков, каждый, вероятно, представляет свой собственный MIDI-канал. Все треки начинают воспроизводиться в один и тот же нулевой момент времени. Все треки, взятые вместе, образуют паттерн. Если ваш секвенсор разделяет в памяти различные MIDI-треки и хранит их в различных блоках и воспроизводит различные треки одновременно, то такой секвенсор будет читать и писать файлы типа 1.