MIDI (Musical instrument Digital Interface) — это протокол, который был разработан в начале 1983 года ведущими фирмами-производителями музыкального оборудования, такими как Roland™, Korg™, E-mu™, Yamaha™ и другими. Изначально он был предназначен для замены принятого в то время способа управления музыкальными инструментами при помощи аналоговых сигналов управлением при помощи информационных сообщений (events), передаваемых по цифровому интерфейсу. Впоследствии он стал стандартом де-факто в области электронных музыкальных инструментов и компьютерных модулей синтеза. В настоящее время существует несколько стандартов протокола MIDI: XG, GS, GM и другие.
Основным понятием в MIDI-протоколе является событие (event) или сообщение. Каждый раз, когда происходит нажатие на клавишу MIDI-клавиатуры, отпускание нажатой клавиши, вращение ручки или нажатие кнопки, устройство формирует соответствующее MIDI-сообщение или событие. Таким образом, MIDI-поток отражает в себе все действия производимые музыкантом, включая динамику исполнения, технические приёмы и прочее. Каждое такое MIDI-событие привязано к временной сетке и набор этих событий представляет из себя способ записи партитуры. Записанное таким образом произведение может быть сохранено в файл (обычно с расширением mid) и использоваться для последующего воспроизведения и/или редактирования; также возможно использование MIDI в “реальном времени”.
Очень важно понять, что MIDI-протокол не является протоколом передачи звука, а только лишь “кодирует” действия, совершаемые музыкантом на музыкальном инструменте, и передаёт их устройству, которое, в свою очередь, отвечает за воспроизведение звука. Информация, передаваемая устройству в MIDI-потоке, эквивалентна нажатию клавиш, вращению ручек и нажатию кнопок устройства (естественно, при том условии, что в самом устройстве данной кнопке или ручке соответствует какое-либо MIDI-сообщение).
Для того, чтобы устройство могло передавать и получать MIDI-информацию, оно должно иметь внутри себя программу и микропроцессор, которые интерпретируют MIDI-поток, а снаружи — разъёмы, к которым подсоединяется MIDI-кабель.
Виды MIDI разъёмов:
MIDI-выход — через этот разъём устройство посылает MIDI-сообщение на другое устройство;
MIDI-вход — через этот разъём устройство получает MIDI-сообщение от другого устройства;
сквозной — через этот разъём посылается точная копия любого MIDI-сообщения, которое поступило на разъём MIDI.
Для подсоединения MIDI-устройств к компьютеру используется MIDI/joystick-порт.
MIDI-каналы предназначены для того, чтобы один синтезатор или звуковой модуль мог играть несколькими разными тембрами одновременно, причём каждый тембр (инструмент) исполняет свою независимую партию. Когда одно устройство передаёт канальные MIDI-сообщения на другое, внешне это выглядит так, как если бы они были соединены шестнадцатью кабелями (и по каждому следуют указания о том, какие ноты каким тембром играть). На самом деле MIDI-технология использует один кабель, но в каждое канальное MIDI-сообщение вписывается номер MIDI-канала, для которого оно предназначено. Устройство-получатель, пользуясь этим номером, направляет каждое канальное MIDI-сообщение на свой канал.
Как уже было сказано выше, MIDI-информация не содержит в себе непосредственно звуковых данных, а лишь указания некоему устройству, будь то внешний синтезатор или программа выполняющая те же функции, которое ответственно за воспроизведение звука. Таким устройством может быть внешний инструмент или же звуковая карта, которая входит в сборку вашего компьютера.
Как правило, звуковые карты воспроизводят MIDI-файлы при помощи FM-синтезатора, встроенного в них. Хотя возможности FM-синтеза велики, как правило, звучание таких синтезаторов оставляет желать лучшего — на звуковых картах часто используются дешёвые чипсеты фирмы Yamaha™ — OPL2/OPL3 или совместимые с ними.
Гораздо более убедительный звук можно получить при помощи wavetable-синтезатора (WT), который представляет из себя комбинацию постоянной памяти, в которую обычно прошиты банки со звуками от фирмы-производителя и оперативной, в которую могут загружаться пользовательские банки (как, например, на некоторых картах Turtle Beach или Gravis Ultra Sound). Таким образом wavetable-синтезатор совмещает в себе функции синтезатора и сэмплера, что делает возможным использование как прошитых в ROM банков, так и пользовательских.
Каждый тембр, как правило, состоит из сэмплов — аудиозаготовок, которые определяют звучание инструмента. Сэмпл может быть как синтезированным так и записанным при помощи реальных инструментов. Когда вы пытаетесь воспроизвести MIDI-файл (например при помощи программы playmidi [6] или любого другого MIDI-плейера), устройство получает сообщение, которое “просит” его воспроизвести ноту определённой высоты определённым тембром — и, в зависимости от того, по какому принципу оно работает, либо синтезирует этот тембр с нужной частотой, либо воспроизводит сэмпл, который соответствует данному тембру, меняя его высоту (pitch) в соответствии с тем, какова должна быть результирующая высота ноты. Кроме того, при воспроизведении сэмпла его звук может претерпеть многие другие трансформации, но, к сожалению, их описание выходит за рамки данного текста.
В итоге качество звука при воспроизведении, который вы слышите зависит от того, насколько качественный синтезатор встроен в вашу звуковую карту или от того насколько качественные сэмплы использованы в её wavetable.
Некоторые карты (например, Creative SB Live!) не имеют фиксированного wavetable и работают по принципу сэмплера, позволяя загружать в оперативную память компьютера или же в свою собственную память внешние банки звуков (для SB Live! это банки звуков в формате SF2). При этом размер сэмплов ограничен только объёмом памяти, поэтому при таком варианте воспроизведения MIDI-файлов возможно достичь очень неплохого звучания.
В настоящее время возможности сэмплера SB Live! и многих других карт могут быть полностью использованы в операционной системе Linux при использовании драйверов звуковых устройств ALSA, которые включены в ядро, начиная с версии 2.4.18.
[6] При наличии только FM-синтезатора рекомендуем обратить внимание на программу timidity, которая является программным WT-синтезатором.