Однако не менее важно знать, какие MIDI-протоколы поддерживает звуковая плата компьютера. О них и пойдет речь.

Немного истории

Стандарт MIDI был задуман в начале 80-х как интерфейс, позволяющий любым электронным музыкальным инструментам «разговаривать» друг с другом на одном и том же языке. До этого производители разрабатывали собственные коммуникационные системы для своих инструментов, и ни одна из них не была «многоязычной». Поэтому использование синтезаторов разных производителей в одной системе вызывало определенные проблемы. Появление стандарта MIDI сняло их раз и навсегда.

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

Например, тембр трубы в одном устройстве может иметь номер 33, а в другом - 110. Таким образом, хотя сообщение об изменении программы (т. е. загрузка тембра на определенный канал) будет получено и правильно понято, оно совсем не обязательно вызовет требуемый звук. Производители должны были либо разрабатывать файлы для конкретных устройств, либо прилагать к ним гору бумаги с объяснениями, как следует конфигурировать тон-генератор, чтобы сделать звучание узнаваемым. Возникала потребность в протоколах. На сегодняшний день вы можете выбрать для работы один из трех протоколов.

Протоколы General MIDI и Roland GS ворвались на рынок практически одновременно — в 1991 г. Наиболее распространенным стал протокол General MIDI (GM), поэтому большинство производителей оборудования либо выпускает специальные тон-генераторы (например, звуковые платы) General MIDI, либо предусматривает в своих устройствах совместимость с General MIDI наряду со своими собственными специфическими звуками и возможностями. Примеры такой совместимости демонстрируют протокол Roland GS и относительно новое детище Yamaha — протокол XG, каждый из которых использует General MIDI как основу, но включает больше звуков и расширенные возможности управления и редактирования.

Универсальные, специфичные и стандартные данные

Различные типы данных, которые могут быть включены в MIDI-файл, можно условно разбить на три категории: универсальные, специфичные и стандартные.

Хорошим примером универсальных данных служит сообщение «нота»: файл, содержащий ноту С3 (MIDI-нота номер 60), воспроизведет ее именно так на любой звуковой плате. Из этого следует, что ноты могут быть включены в любой MIDI-файл и это не вызовет никаких проблем с совместимостью. Примеры других универсальных сообщений — контроллеры номер* и номер1: первый всегда управляет громкостью канала, а второй — модуляцией.

Специфичными являются те данные, на которые может отвечать только одна звуковая плата (или серия плат одного производителя). Хороший пример специфичных данных — команды System Exclusive: эти сообщения содержат идентификационный номер производителя. Таким образом, сообщение, закодированное для устройства Korg, будет проигнорировано любым другим устройством. Другими примерами являются группа неопределенных контроллеров и группа контроллеров общего назначения, которые в разных устройствах могут использоваться для совершенно различных целей. Специфичными являются и NRPN (незарегистрированные номера параметров).

К третьей категории — стандартные сообщения — относятся данные, которые согласуются со стандартом или протоколом. Наиболее важным примером здесь служит система нумерации тембров (и/или банков). Некоторые производители предусматривают в своих устройствах совместимость с General MIDI наряду с дополнительными звуками и контроллерами. Придерживайтесь звуков и контроллеров General MIDI, и файл будет воспроизведен точно на любом устройстве, совместимом с General MIDI. Включите в композицию дополнительный звук (или контроллер), и одно устройство будет воспроизводить его правильно, а другое, несмотря на совместимость с General MIDI, вообще не воспроизведет никакого звука. Другими словами, этот звук или параметр является специфичным для определенной звуковой платы.

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

General MIDI

General MIDI был первым протоколом, разработанным для достижения совместимости тон-генераторов, и многие производители сегодня выпускают хотя бы одну звуковую плату, поддерживающую General MIDI.

Протокол General MIDI определяет список из 128 инструментов (набор звуков), которые доступны через команды изменения программ. МIDI-файл, содержащий на определенном канале команду номер 30 об изменении программы, вызывающую звук овердрайв-гитары, будет вызывать звук овердрайв-гитары на этот канал при воспроизведении данного файла на любой звуковой плате, совместимой с General MIDI. Но ничего не поделаешь с тем, что конкретная инструментальная партия, которая отлично звучит у вас, может показаться не такой уж хорошей на другом компьютере.

Устройство, совместимое с General MIDI, должно предоставлять по крайней мере 24-голосную полифонию с динамическим распределением голосов, а также доступ к 16 каналам. Каждый канал полифоничен, и на него можно загрузить тот или иной тембр (за исключением канала 10, на котором всегда располагаются ударные). По соглашению канал 2 предоставляется басу, канал 4 зарезервирован для основной мелодической линии, а канал 5 представляет предполагаемую голосовую партию. Единственный набор барабанов, называемый стандартным, автоматически загружается на канал 10 командой GM Reset. Этот стандартный набор барабанов содержит 47 перкуссионных звуков, которым соответствуют MIDI-ноты под номерами с 35-го по 81-й. Эффекты хоруса и реверберации обычно включаются как неофициальные дополнения. Файлы General MIDI должны быть стандартными MIDI-файлами типа 0 с разрешением 96 тиков на четвертную долю.

Протокол General MIDI кроме этого распознает ограниченный набор команд, изменяющих управление, или контроллеров:

СС1 — модуляция;

СС6 — ввод данных MSB;

СС7 — громкость;

СС10 — панорама;

СС11 — экспрессия;

СС3 — ввод данных LSB;

СС64 — педаль сустэйна;

СС91 — глубина внешнего эффекта (реверберация);

СС93 — глубина хоруса.

В дополнение к перечисленным выше контроллерам существуют более поздние расширения протокола — зарегистрированные номера параметров (RPN). RPN используются преимущественно для организации доступа к диапазону смещения высоты тона. RPN представляют собой набор из пяти контроллеров:

101—0;

100—0;

6—7;

101—127;

100—127.

Первые два контроллера указывают на параметр «Смещение высоты тона» (номер 0), контроллер СС6 устанавливает диапазон (в данном случае 7 полутонов), и последние два контроллера закрывают сообщение (всегда со значением 127).

RPN могут также использоваться для подстройки высоты звучания канала: установка контроллеру СС100 значения 1 позволяет управлять тонкой подстройкой высоты звучания канала (это требует появления дополнительного контроллера СС38, следующего за контроллером СС6); значение, равное 2, будет управлять грубой подстройкой.

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

Прочитайте Руководство пользователя, прилагаемое к звуковой плате, чтобы узнать, какие дополнительные возможности она предоставляет.

Roland GS

Стандарт Roland GS является расширением протокола General MIDI, он предлагает дополнительные банки звуков, наборы ударных инструментов и расширенную реализацию изменений в управлении. (Вопреки распространенному мнению, GS не является аббревиатурой для General Standard, это просто имя микросхемы, используемой в тон-генераторах Roland.)

Файлы General MIDI совместимы со звуковыми платами GS, но не используют полностью их потенциал. Как и General MIDI, Roland GS обеспечивает совместимость на уровне тон-генераторов, и, как обычно, эта совместимость имеет свои плюсы и минусы. Позитивным является то, что дополнения Roland GS предоставляют большую гибкость при программировании, а качество и тембральные характеристики звуков остаются совместимыми при переходе от одного оборудования Roland к другому. Негативным является то, что эта совместимость ограничена тон-генераторами Roland, что снижает значение MIDI-файлов GS.

Набор контроллеров, распознаваемых протоколом GS, включает незарегистрированные номера параметров (NRPN). Он позволяет изменять звучание инструментов, что ранее было возможно лишь через сообщения SysEx.

Наборы звуков, соответствующие протоколу GS, хранятся в отдельных банках, доступных через контроллеры выбора банка — Bank Select 0 и 32. Набор звуков General MIDI является основным банком и называется Capital Set. Многие из этих 128 основных звуков имеют одну или более вариаций: например, тембр джазовой гитары имеет вариацию, которая называется «гавайская гитара». Вариации вызываются путем помещения контроллера СС0 или СС32 с необходимым значением перед командой, изменяющей программу (т. е. сначала выбирают банк, а потом звук из этого банка). Значение контроллера СС0 является номером банка, содержащего вариацию тембра, а значение СС32 всегда равно 0.

Реализация сообщений о выборе банка в стандарте GS изменилась по сравнению с первоначальной. Поначалу GS требовал только контроллера СС0; СС32 мог быть использован, но игнорировался. Более поздние «издания» стандарта определенно требуют присутствия СС32, но всегда со значением 0.

Устройства, поддерживающие протокол GS, содержат ряд различных наборов ударных инструментов и звуковых эффектов, которые по умолчанию используются на канале 10. Каждый набор доступен через собственную команду изменения программы, а первичный набор Standard Kit — это набор ударных General MIDI. Многие наборы, включая и первичный, содержат дополнительные звуки, которым присвоены номера MIDI-нот из более широкого диапазона. Полезная возможность, предоставляемая GS, состоит в том, что вы можете загрузить ударные более чем на один канал, а это позволяет использовать более одного набора барабанов, если возникает такая необходимость.

И последнее, что следует помнить о протоколе GS: его свойства и возможности имеют тенденцию расширяться с появлением нового оборудования. Каждый производитель пытается использовать возможности, предоставляемые развитием технологии. Говоря абстрактно, это великолепно. На деле же для программистов это означает только, что в мире существует много людей, которые используют оборудование GS, соответствующее различным точкам на эволюционном пути стандарта.

Открытый формат Yamaha XG

Заявив о своем стандарте XG в начале 1994 г., Yamaha вступила в борьбу на рынке протоколов. Как и в случае с Roland GS, речь шла о предложении более продвинутой альтернативы General MIDI.

Одно из основных и, бесспорно, важных преимуществ протокола XG — совместимость. Устройства XG могут воспроизводить файлы General MIDI так же успешно, как и устройства GS или «родные» устройства GM. Однако основной упор Yamaha был сделан на то, чтобы добиться более высокого уровня совместимости с устройствами GS (при использовании похожих контроллеров и раскладки NRPN), а также получить возможность распознавания сообщений SysEx для GS. Таким образом, звуковые платы XG могут воспроизводить файлы GS не менее успешно, чем устройства производства Roland. В результате перед пользователями, намеревающимися программировать файл для определенного протокола, вновь встает вопрос, впервые возникший еще тогда, когда всех этих протоколов не существовало: чьи звуки лучше?

Упомянутая выше совместимость также означает, что файлы XG могут быть воспроизведены на звуковых платах GM и GS. Ясно, что некоторые параметры файлов XG будут в этом случае потеряны (на специальных устройствах GM потеряно будет весьма многое), но вы все-таки получите довольно точное звучание инструментов на каждом из каналов, и устройства будут реагировать на все контроллеры, которые смогут распознать, и просто игнорировать те, которые распознать не смогут. Само собой, XG обладает дополнительными возможностями, которые позволяют его рассматривать как вполне достойный самостоятельный протокол.

Особенность формы сообщения SysEx, используемой в данном протоколе, состоит в том, что все коды содержат ссылку на «устройство XG», а не на «устройство Yamaha». Причина этого проста: чтобы заставить всех считаться с протоколом XG, его разработали как открытый формат. Иными словами, Yamaha поощряет других производителей выпускать свои собственные XG-устройства, это очень похоже на то обстоятельство, что большинство производителей сегодня выпускают GM-устройства.

Очевидно, что большинство параметров протокола GS реализованы и в протоколе XG. Вот основные различия в их реализации.

  • Наличие 32-голосной полифонии. Это минимальное значение полифонии для протокола; на рынке присутствуют устройства GM и GS, обеспечивающие 64-голосную полифонию.
  • Допустимо использовать до трех наборов ударных инструментов на любом из каналов (при этом для совместимости с двумя предыдущими протоколами основным вариантом остается единственный набор на канале 10).
  • Все изменяемые параметры доступны через SysEx, а некоторые доступны более простым способом — через незарегистрированные номера параметров.
  • Существует возможность использования трех эффектов одновременно. Как и в предыдущих протоколах, это реверберация, хорус (СС91 и 93 соответственно) и банк переключаемых эффектов, отвечающих на контроллер СС94. Этот банк содержит такие эффекты, как автопанорама, задержка и т. д. Только один из эффектов данного банка может быть выбран в определенный момент времени. Тип выбранного эффекта глобален, т. е. воздействует на все каналы.

XG включает в себя полную реализацию команд выбора банка (контроллеры СС0 и 32), как того требует спецификация MIDI. Таким образом, в сочетании с командами изменения программы у вас в наличии оказывается более двух миллионов голосов (т. е. 128 в третьей степени). Это, конечно, не означает, что какое-то устройство содержит такое количество инструментов... Но если бы это и было возможно, смогли бы вы выбрать из них что-то?

Банки устроены точно таким же образом, как и в протоколе GS. 128 звуков General MIDI составляют основу, при этом каждый из этих звуков имеет 16 383 потенциальных вариации.