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

Доступ к Системным ресурсам MIDI

API Звука Java предлагает гибкую модель для конфигурации системы MIDI, как это делает для конфигурации выбранной аудиосистемы. Реализация API Звука Java может самостоятельно обеспечить различные виды MIDI-устройств, и дополнительные могут быть предоставлены поставщиками услуг и установлены пользователями. Можно записать свою программу таким способом, которым она делает немногими предположениями, о которых определенные MIDI-устройства устанавливаются на компьютере. Вместо этого программа может использовать в своих интересах системные значения по умолчанию MIDI, или она может позволить пользователю выбирать из любых устройств, оказывается, доступны.

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

Класс MidiSystem

Роль MidiSystem class в пакете MIDI API Звука Java непосредственно походит на роль AudioSystem в выбранном аудиопакете. MidiSystem действия как расчётная палата для того, чтобы получить доступ к установленным ресурсам MIDI.

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

MidiSystem class также обеспечивает методы для того, чтобы они преобразовали между файлами MIDI и Sequences. Это может сообщить о формате файла файла MIDI и может записать файлы различных типов.

Прикладная программа может получить следующие ресурсы из MidiSystem:

Эта страница сосредотачивается на первых четырех из этих типов ресурса. Другие обсуждаются позже в этом учебном руководстве.

Получение Устройств Значения по умолчанию

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

Есть устройство синтезатора значения по умолчанию, устройство секвенсера значения по умолчанию, устройство передачи значения по умолчанию, и приемное устройство значения по умолчанию. Последние два устройства обычно представляют порты ввода и вывода MIDI, соответственно, если есть кто-либо доступный на системе. (Легко запутаться о направленности здесь. Думайте о передаче портов или приеме относительно программного обеспечения, не относительно любых внешних физических устройств, соединенных с физическими портами. Входной порт MIDI передает данные от внешнего устройства до API Звука Java Receiver, и аналогично выходной порт MIDI получает данные от программного объекта и передает данные к внешнему устройству.)

Простая прикладная программа могла бы только использовать значение по умолчанию вместо того, чтобы исследовать все установленные устройства. MidiSystem class включает следующие методы для того, чтобы получить ресурсы значения по умолчанию:

static Sequencer getSequencer()
static Synthesizer getSynthesizer()
static Receiver getReceiver()
static Transmitter getTransmitter()

Первые два из этих методов получают ресурсы упорядочивания и синтеза значения по умолчанию системы, которые или представить физические устройства или реализуются полностью в программном обеспечении. getReceiver метод получает a Receiver объект, который берет сообщения MIDI, отправленные этому, и передает их к приемному устройству значения по умолчанию. Точно так же getTransmitter метод получает объект Передатчика, который может отправить сообщения MIDI некоторому получателю от имени устройства передачи значения по умолчанию.

Изучение, Какие Устройства Устанавливаются

Вместо того, чтобы использовать устройства значения по умолчанию, более полный подход должен выбрать требуемые устройства из полного комплекта устройств, которые устанавливаются на системе. Прикладная программа может выбрать требуемые устройства программно, или она может вывести на экран список доступных устройств и позволить пользователю выбирать, которые использовать. MidiSystem class обеспечивает метод для того, чтобы он учился, какие устройства устанавливаются, и соответствующий метод, чтобы получить устройство данного типа.

Вот метод для того, чтобы узнать об установленных устройствах:

 tatic MidiDevice.Info[] getMidiDeviceInfo()

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

Можно вывести на экран эти строки в своем пользовательском интерфейсе, чтобы позволить пользователю выбирать из списка устройств.

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

Другой, более общий, подход должен идти вперед и выполнить итерации по MidiDevice.Info объекты, получая каждое соответствующее устройство, и определяя программно, является ли это подходящим для использования (или по крайней мере подходящим, чтобы включать в список, из которого пользователь может выбрать). Следующий раздел описывает, как сделать это.

Получение Требуемого Устройства

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

static MidiDevice getMidiDevice(MidiDevice.Info info)

Можно использовать этот метод, если Вы уже сочли объект информации описанием устройства, Вы нуждаетесь. Однако, если невозможно интерпретировать объекты информации, возвращенные getMidiDeviceInfo чтобы определить, в каком устройстве Вы нуждаетесь, и если Вы не хотите выводить на экран информацию обо всех устройствах пользователю, Вы могли бы быть в состоянии сделать следующий вместо этого: Выполните итерации по весь MidiDevice.Info объекты, возвращенные getMidiDeviceInfo, получите соответствующие устройства, используя метод выше, и протестируйте каждое устройство, чтобы видеть, является ли это подходящим. Другими словами можно запросить каждое устройство для его class и его возможностей прежде включая это в списке, который Вы выводите на экран пользователю, или как способ выбрать устройство программно, не включая пользователя. Например, если Ваша программа нуждается в синтезаторе, можно получить каждое из установленных устройств, видеть, которые являются экземплярами классов, которые реализуют Synthesizer интерфейс, и затем выводит на экран их в списке, из которого пользователь может выбрать один, следующим образом:

// Obtain information about all the installed synthesizers.
Vector synthInfos;
MidiDevice device;
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
    try {
        device = MidiSystem.getMidiDevice(infos[i]);
    } catch (MidiUnavailableException e) {
          // Handle or throw exception...
    }
    if (device instanceof Synthesizer) {
        synthInfos.add(infos[i]);
    }
}
// Now, display strings from synthInfos list in GUI.    

Как другой пример, Вы могли бы выбрать устройство программно, не включая пользователя. Давайте предположим, что Вы хотите получить синтезатор, который может играть большинство примечаний одновременно. Вы выполняете итерации по всему MidiDevice. Объекты информации, как выше, но после определения, что устройство является синтезатором, Вы запрашиваете его возможности, вызывая getMaxPolyphony метод Synthesizer. Вы резервируете синтезатор, у которого есть самая большая полифония, как описано в следующем разделе. Даже при том, что Вы не просите, чтобы пользователь выбрал синтезатор, Вы могли бы все еще вывести на экран строки от выбранного MidiDevice.Info объект, только для информации пользователя.

Открытие Устройств

Предыдущий раздел показал, как получить установленное устройство. Однако, устройство могло бы быть установлено, но недоступное. Например, у другой прикладной программы могло бы быть монопольное использование этого. Чтобы фактически зарезервировать устройство для Вашей программы, Вы должны использовать MidiDevice метод open:

if (!(device.isOpen())) {
    try {
      device.open();
  } catch (MidiUnavailableException e) {
          // Handle or throw exception...
  }
}

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

Когда сделано с устройством, Вы выпускаете это для использования других программ, вызывая close метод MidiDevice.


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

Предыдущая страница: Краткий обзор Пакета MIDI
Следующая страница: Передача и Получение сообщений MIDI