2013-09-20 2 views
1

Я перечисляю все MIDI-устройства в combobox, но для драйверов loopback я получаю повторяющиеся записи.Список MIDI-устройств Java Duplicates

  • Первые записи не работают и не содержат описания ( getDescription() не возвращает «Никаких подробностей доступно»)
  • остальных, которые являются рабочими,, возвращение «Внешний MIDI порт» описание.

Теперь я хотел бы знать, почему rtpMidi, LoopBE, LoopMidi и все драйверы петлевой вызывают эти повторяющиеся записи, так что я могу исключить их из списка в безопасном режиме. Я мог просто избежать записей без действительного описания, но мне не нравится действовать, не зная причины, по которым эти записи сообщаются в первую очередь. Еще одна вещь, которая меня озадачивает, заключается в том, что если я попытаюсь фильтровать результаты с помощью «if (dev instanceof Receiver)», я получаю пустой список, то же самое с instanceof Transmitter, Synthesizer и Sequencer. Итак, похоже, что ни одно из устройств midi не является экземпляром одного из этих классов, а только экземпляром класса MidiDevice, который не помогает мне с фильтром списка ... Может ли кто-нибудь предложить другое решение?

// Get MIDI device list 
info = MidiSystem.getMidiDeviceInfo(); 
device = new ArrayList<MidiDevice>(); 
deviceDetails = new ArrayList<String>(); 
int j=0; 
for (int i = 0; i < info.length; i++) { 
    MidiDevice dev = MidiSystem.getMidiDevice(info[i]); 

    //if (dev instanceof Receiver) { // tried Receiver, Transmitter, Synthesizer and Sequencer 

     // Detailed List 
     deviceDetails.add("Device ID: " + j); 
     deviceDetails.set(j, deviceDetails.get(j) + "\nName: " + info[i].getName()); 
     deviceDetails.set(j, deviceDetails.get(j) + "\nDescription: " + info[i].getDescription()); 
     device.add(dev); 
     deviceDetails.set(j, deviceDetails.get(j) + "\nDevice: " + device.get(j)); 
     //Combo Box (Dev names only) 
     MidiOutCombo.add(info[i].getName()); 
     j++; 
    //} 
} 

Вот временное решение, которое я нашел, это работает, но это строка на основе, и я не знаю, работает ли это кроссплатформенное ...

if (info[i].getDescription().compareTo("External MIDI Port") == 0) { 

ответ

0

водителей Петлевых обычно имеют два порта, один для прием, и один для передачи.

Чтобы определить, есть ли в телефоне MIDIDevice какие-либо приемники или передатчики, вы должны позвонить его методам getMaxReceivers/getMaxTransmitters.