1

我在组合框中列出了所有 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 ) {
4

1 回答 1

0

环回驱动程序通常有两个端口,一个用于接收,一个用于发送。

要确定 aMIDIDevice是否有任何接收器或发送器,您必须调用它的getMaxReceivers/getMaxTransmitters方法。

于 2013-09-22T07:56:12.767 回答