Spec-Zone .ru
спецификации, руководства, описания, API
След: Звук
Краткий обзор Пакета MIDI
Домашняя страница > Звук

Краткий обзор Пакета MIDI

Введение дало проблеск в возможности MIDI API Звука Java. Обсуждение, которое следует, обеспечивает более подробное введение в архитектуру MIDI API Звука Java, к которой получают доступ через javax.sound.midi пакет. Некоторые основные характеристики самого MIDI объясняются, как переболее новое или введение, чтобы поместить функции MIDI API Звука Java в контекст. Это тогда продолжает обсуждать подход API Звука Java к MIDI как подготовка к задачам программирования, которые объясняются в последующих разделах. Следующее обсуждение API MIDI делится на две основных области: данные и устройства.

Переболее новый MIDI: Провода и Файлы

Цифровой интерфейс музыкальных инструментов (MIDI) стандарт определяет протокол связи для устройств электронной музыки, таких как электронные инструменты клавиатуры и персональные компьютеры. Данные MIDI могут быть переданы по специальным кабелям во время живого выступления, и могут также храниться в стандартном типе файла для более позднего воспроизведения или редактирования.

Этот раздел рассматривает некоторые основы MIDI, независимо от API Звука Java. Обсуждение предназначается как переболее новое для читателей, познакомивших с MIDI, и как краткое введение для тех, кто не, чтобы обеспечить фон для последующего обсуждения пакета MIDI API Звука Java. Если у Вас есть полное понимание MIDI, можно безопасно пропустить этот раздел. Прежде, чем записать существенные приложения MIDI, программисты, которые незнакомы с MIDI, будут, вероятно, нуждаться в более полном описании MIDI, чем можно включить в это учебное руководство. См. Полный MIDI 1.0 Подробных Спецификации, которые доступны только в твердой копии от http://www.midi.org (хотя Вы могли бы найти перефразируемые или полученные в итоге версии в Сети).

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

Краткая аппаратная часть спецификации MIDI предписывает pinouts для кабелей MIDI и разъемов, в которые включаются эти кабели. Эта часть не должна коснуться нас. Поскольку устройства, которые первоначально потребовали аппаратных средств, таких как секвенсеры и синтезаторы, теперь implementable в программном обеспечении, возможно единственная причина для большинства программистов знать, что что-либо об устройствах MIDI должно просто понять метафоры в MIDI. Однако, внешние устройства MIDI все еще важны для некоторых важных музыкальных приложений, и таким образом, API Звука Java поддерживает ввод и вывод данных MIDI.

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

Мы объясним, что подразумевало потоковой передачей и упорядочиванием, исследуя цель каждой из этих двух частей спецификации MIDI.

Потоковая передача Данных в Протоколе Провода MIDI

Первая из этих двух частей спецификации MIDI описывает то, что известно неофициально как "протокол провода MIDI." MIDI Соединяет проводом протокол, который является исходным протоколом MIDI, базируется при условии, что данные MIDI отправляются по кабелю MIDI ("провод"). Кабель передает цифровые данные от одного MIDI-устройства до другого. Каждое из MIDI-устройств могло бы быть музыкальным инструментом или подобным устройством, или это мог бы быть компьютер общего назначения, оборудованный СПОСОБНОЙ К MIDI звуковой картой или интерфейсом MIDI К ПОСЛЕДОВАТЕЛЬНОМУ ПОРТУ.

Данные MIDI, как определено протоколом провода MIDI, организуются в сообщения. Различные виды сообщения отличает первый байт в сообщении, известном как байт состояния. (Байты состояния являются единственными байтами, у которых есть набор битов самого высокого порядка к 1.) Байты, которые следуют за байтом состояния в сообщении, известны как байты данных. Определенные сообщения MIDI, известные как канал, обмениваются сообщениями, имейте байт состояния, который содержит четыре бита, чтобы определить вид сообщения канала и еще четыре бита, чтобы определить номер канала. Есть поэтому 16 каналов MIDI; устройства, которые получают сообщения MIDI, могут быть установлены ответить на сообщения канала на всех или только одном из этих виртуальных каналов. Часто каждый канал MIDI (который не должен быть перепутан с каналом аудио) используется, чтобы отправить сообщения для различного инструмента. Как пример, два общих сообщения канала являются Примечанием По и Примечанием Прочь, которые запускают звучание примечания и затем останавливают его, соответственно. Эти два сообщения каждый берет два байта данных: первое определяет подачу примечания и второе ее "скорость" (как быстро клавиша подавляется или отпускается, предполагая, что инструмент клавиатуры играет примечание).

Протокол провода MIDI определяет модель потоковой передачи для данных MIDI. Центральная функция этого протокола - то, что байты данных MIDI поставляются в вещественном числе time⠀” другими словами, они передаются потоком. Сами данные не содержат информации о синхронизации; каждое событие обрабатывается, поскольку оно получается, и предполагается, что оно прибывает в корректное время. Та модель прекрасна, если примечания сгенерированы живым музыкантом, но это недостаточно, если Вы хотите сохранить примечания для более позднего воспроизведения, или если Вы хотите составить их из реального времени. Это ограничение понятно, когда Вы понимаете, что MIDI был первоначально разработан для музыкального представления, как способ для музыканта клавиатуры управлять больше чем одним синтезатором, назад в дни перед многими музыкантами используемые компьютеры. (В 1984 была выпущена первая версия спецификации.)

Упорядоченные Данные в Стандартных Файлах MIDI

Стандартная часть Файлов MIDI спецификации MIDI адресует ограничение синхронизации в протоколе провода MIDI. Стандартный файл MIDI является цифровым файлом, который содержит события MIDI. Событие является просто сообщением MIDI, как определено в протоколе провода MIDI, но с дополнительной информацией, которая определяет синхронизацию события. (Есть также некоторые события, которые не соответствуют сообщениям протокола провода MIDI, как мы будем видеть в следующем разделе.) Дополнительной информацией о синхронизации является серия байтов, которая указывает, когда выполнить работу, описанную сообщением. Другими словами стандартный файл MIDI определяет не только, который отмечает, чтобы играть, но и точно когда играть каждого из них. Это немного походит на музыкальный счет.

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

Представление API Звука Java Данных MIDI

Теперь, когда мы делали набросок подхода спецификации MIDI к переданному потоком и упорядочили музыкальные данные, давайте исследуем, как API Звука Java представляет те данные.

Сообщения MIDI

MidiMessage абстрактный class, который представляет "необработанное" сообщение MIDI. "Необработанное" сообщение MIDI обычно является сообщением, определенным протоколом провода MIDI. Это может также быть одно из событий, определенных Стандартной спецификацией Файлов MIDI, но без информации о синхронизации события. Есть три категории необработанного сообщения MIDI, представленного в API Звука Java этими соответствующими тремя MidiMessage подклассы:

События MIDI

Как мы видели, стандартные файлы MIDI содержат события, которые являются обертками для "необработанных" сообщений MIDI наряду с информацией о синхронизации. Экземпляр API Звука Java MidiEvent class представляет событие то, которое могло бы быть сохранено в стандартном файле MIDI.

API для MidiEvent включает методы, чтобы установить и получить значение синхронизации события. Есть также метод, чтобы получить его встроенное необработанное сообщение MIDI, которое является экземпляром подкласса MidiMessage, обсужденный затем. (Встроенное необработанное сообщение MIDI может быть установлено только, создавая MidiEvent.)

Последовательности и Дорожки

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

API Звука Java организует данные MIDI в трехчастной иерархии:

A Track набор MidiEvents, и a Sequence набор Tracks. Эта иерархия отражает файлы, дорожки, и события Стандартной спецификации Файлов MIDI. (Отметьте: это - иерархия с точки зрения включения и владения; это не иерархия class с точки зрения наследования. Каждый из этих трех классов наследовался непосредственно от java.lang.Object.)

Sequences может быть считан из файлов MIDI, или создан с нуля и отредактирован, добавляя Tracks к Sequence (или удаление их). Точно так же MidiEvents может быть добавлен к или удален из дорожек в последовательности.

Представление API Звука Java MIDI-устройств

Предыдущий раздел, объясненный, как сообщения MIDI представляются в API Звука Java. Однако, сообщения MIDI не существуют в вакууме. Они обычно отправляются от одного устройства до другого. Программа, которая использует API Звука Java, может генерировать сообщения MIDI с нуля, но чаще сообщения вместо этого создаются устройством программного обеспечения, таким как секвенсер, или получаются снаружи компьютера через входной порт MIDI. Такое устройство обычно отправляет эти сообщения другому устройству, такие как синтезатор или выходной порт MIDI.

Интерфейс MidiDevice

В мире внешних устройств MIDI много устройств могут передать сообщения MIDI к другим устройствам и также получить сообщения от других устройств. Точно так же в API Звука Java, программные объекты, которые реализуют MidiDevice интерфейс может передать и получить сообщения. Такой объект может быть реализован просто в программном обеспечении, или это может служить интерфейсом к аппаратным средствам, таким как возможности MIDI звуковой карты. Основа MidiDevice интерфейс обеспечивает всю функциональность, обычно требуемую портом ввода или вывода MIDI. Синтезаторы и секвенсеры, однако, далее реализуют один из подынтерфейсов MidiDevice: Synthesizer или Sequencer , соответственно.

MidiDevice интерфейс включает API для открытия и закрытия устройства. Это также включает внутренний вызванный class MidiDevice.Info это обеспечивает текстовые описания устройства, включая его имя, поставщика, и версию. Если Вы считали часть выбранного аудио этого учебного руководства, этот API будет, вероятно, звучать знакомым, потому что его проект подобен тому из javax.sampled.Mixer интерфейс, который представляет аудиоустройство и у которого есть аналогичный внутренний class, Mixer.Info.

Передатчики и Получатели

Большинство MIDI-устройств способно к отправке MidiMessages, получение их, или обоих. Путем устройство передается, данные через один или более объектов передатчика, которые это "имеет". Точно так же способ, которым устройство получает данные, через один или больше его объектов получателя. Объекты передатчика реализуют Transmitter интерфейс, и получатели реализуют Receiver интерфейс.

Каждый передатчик может быть соединен только с одним получателем за один раз, и наоборот. Устройство, которое отправляет его сообщения MIDI многократным другим устройствам одновременно, делает так при наличии многократных передатчиков, каждый соединенный с получателем различного устройства. Точно так же устройство, которое может получить сообщения MIDI больше чем от одного источника за один раз, должно сделать так через многократные получатели.

Секвенсеры

Секвенсер является устройством для того, чтобы получить и воспроизвести последовательности событий MIDI. У этого есть передатчики, потому что это обычно отправляет сообщения MIDI, хранившие в последовательности к другому устройству, такие как синтезатор или выходной порт MIDI. У этого также есть получатели, потому что это может получить сообщения MIDI и сохранить их в последовательности. К его суперинтерфейсу, MidiDevice, Sequencer добавляют методы для основных операций упорядочивания MIDI. Секвенсер может загрузить последовательность из файла MIDI, запроса и установить темп последовательности, и синхронизировать другие устройства с этим. Прикладная программа может зарегистрировать объект, который будет уведомлен, когда секвенсер обрабатывает определенные виды событий.

Синтезаторы

A Synthesizer устройство для того, чтобы генерировать звук. Это - единственный объект в javax.sound.midi пакет, который производит аудиоданные. Устройство синтезатора управляет рядом объектов канала MIDI — обычно 16 из них, так как спецификация MIDI призывает к 16 каналам MIDI. Эти объекты канала MIDI являются экземплярами class, который реализует MidiChannel интерфейс, методы которого представляют речевые сообщения канала "спецификации MIDI" и "сообщения режима канала."

Прикладная программа может генерировать звук, непосредственно вызывая методы объектов канала MIDI синтезатора. Более обычно, тем не менее, синтезатор генерирует звук в ответ на сообщения, отправленные один или больше его получателей. Эти сообщения могли бы быть отправлены секвенсером или входным портом MIDI, например. Синтезатор анализирует каждое сообщение, что его получатели добираются, и обычно диспетчеризирует соответствующую команду (такой как noteOn или controlChange) к одному из MidiChannel объекты, согласно номеру канала MIDI, определенному в конечном счете.

MidiChannel использует информацию о примечании в этих сообщениях, чтобы синтезировать музыку. Например, a noteOn сообщение определяет подачу примечания и "скорость" (объем). Однако, информация о примечании недостаточна; синтезатор также требует точных инструкций по тому, как создать аудиосигнал для каждого примечания. Эти инструкции представляются Instrument. Каждый Instrument обычно эмулирует различный реальный музыкальный инструмент или звуковой эффект. Instruments мог бы стать предварительными установками с синтезатором, или они могли бы быть загружены из soundbank файлов. В синтезаторе, Instruments располагаются числом банка (они могут считаться строками), и число программы (столбцы).

Этот раздел обеспечил фон для того, чтобы он понял данные MIDI, и это представило некоторые из важных интерфейсов и классов, связанных с MIDI в API Звука Java. Последующее шоу разделов, как можно получить доступ и использовать эти объекты в своих прикладных программах.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Используя Файлы и Преобразователи Формата
Следующая страница: Доступ к Системным ресурсам MIDI