Я перечисляю все 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) {