Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

<Содержание

Глава 9: Доступ к Системным ресурсам MIDI

 

Отметить

С версией 5.0, sound.properties файл может использоваться, чтобы установить устройства по умолчанию для Sequencer, Synthesizer, Transmitter, и Receiver. Для получения дополнительной информации см. MidiSystem класс в API; для примеров см. Приложение 2: sound.properties Файл в этом руководстве.


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

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

Класс MidiSystem

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

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

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

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

Эта глава сосредотачивается на первых четырех из этих типов ресурса. MidiSystem погрузочно-разгрузочные устройства файла класса обсуждаются в Главе 11, "Игра, Запись, и Редактирование Последовательностей MIDI," и Главы 12, "Синтезируя Звук." Чтобы понять, как система самого MIDI получает доступ ко всем этим ресурсам, см. Часть III этого руководства, "Интерфейсы Поставщика услуг."

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

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

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

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

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

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

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

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

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

    static MidiDevice.Info[] getMidiDeviceInfo()

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

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

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

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

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

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

    static MidiDevice getMidiDevice(MidiDevice.Info info)

Можно использовать этот метод, если Вы уже сочли объект информации описанием устройства, Вы нуждаетесь. Однако, если невозможно интерпретировать объекты информации, возвращенные getMidiDeviceInfo чтобы определить, в каком устройстве Вы нуждаетесь, и если Вы не хотите выводить на экран информацию обо всех устройствах пользователю, Вы могли бы быть в состоянии сделать следующий вместо этого: Выполните итерации по весь MidiDevice.Info объекты, возвращенные getMidiDeviceInfo, получите соответствующие устройства, используя метод выше, и протестируйте каждое устройство, чтобы видеть, является ли это подходящим. Другими словами можно запросить каждое устройство для его класса и его возможностей прежде включая это в списке, который Вы выводите на экран пользователю, или как способ выбрать устройство программно, не включая пользователя. Например, если Ваша программа нуждается в синтезаторе, можно получить каждое из установленных устройств, видеть, которые являются экземплярами классов, которые реализуют 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 между ними. Эта процедура описывается в Главе 10, "Передавая и Получая сообщения MIDI."

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

 


Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами