Есть ли способ получить список всех MIDI-устройств на Java?

#java #javax.sound.midi

Вопрос:

Я пытаюсь получить все MIDI-устройства на Java, что оказалось сложнее, чем я думал…

Я попробовал for each() цикл, но он не сработает, потому что я не знаю, для чего ArrayList я использую этот метод.

Вот мой код:

 package com.example.cmmp.midi;  import javax.sound.midi.*; import javax.sound.midi.spi.MidiDeviceProvider; import java.util.*;  @SuppressWarnings("unchecked") public class MidiDeviceReceiver {  private static MidiSystem MidiDevice;   public static Sequencer getSequencer() throws MidiUnavailableException {  return MidiSystem.getSequencer ();  }  public static Listlt;MidiDevicegt; getMidiDevices(){  javax.sound.midi.MidiDeviceReceiver midiDeviceReceiver = new javax.sound.midi.MidiDeviceReceiver () {  public MidiSystem MidiDevice;  public void send(MidiMessage message, long timeStamp) {   } //close  public void close() {   }   public MidiDevice getMidiDevice() {  MidiDeviceProvider midi = new MidiDeviceProvider () {  public MidiDevice.Info[] getDeviceInfo() {  return new MidiDevice.Info[0];  }   public MidiDevice getDevice(MidiDevice.Info info) {  try {  MidiDevice = (MidiSystem) MidiSystem.getMidiDevice ( info );  } catch (MidiUnavailableException e) {  e.printStackTrace ();  }  return (javax.sound.midi.MidiDevice) MidiDevice;  }  };  return (javax.sound.midi.MidiDevice) MidiDevice;  }  };  return (Listlt;javax.sound.midi.MidiDevicegt;) MidiDevice;  } }  

Любая помощь будет признательна.

Ответ №1:

Вы можете перечислить все промежуточные устройства следующим образом:

 package org.example2;  import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiUnavailableException;  public class App2 {   public static void main(String[] args) throws MidiUnavailableException {  MidiDevice.Info[] devices = MidiSystem.getMidiDeviceInfo();  for (MidiDevice.Info info : devices) {  try {  MidiDevice device = MidiSystem.getMidiDevice(info);  System.out.println(info.getDescription()   " "   device.toString());  } catch (MidiUnavailableException e) {  System.out.println("Device "   info.getDescription()   " is not available");  e.printStackTrace();  }  }  } }  

Конечно, это дает вам статический список устройств, которые присутствовали при вызове функции-если кто-то подключит/отключит устройство, то список устареет.

Комментарии:

1. Спасибо за помощь!