我在组合框中列出了所有 MIDI 设备,但是对于环回驱动程序,我得到了重复的条目。
- 第一个条目不起作用并且不包含描述( getDescription() 返回“No details available”)
- 其他是工作的,返回“外部 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 ) {