【问题标题】:Java MIDI Device List DuplicatesJava MIDI 设备列表重复
【发布时间】:2013-09-25 14:32:30
【问题描述】:

我在组合框中列出了所有 MIDI 设备,但是对于环回驱动程序,我得到了重复的条目。

  • 第一个条目不起作用并且不包含描述 ( 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 ) {

【问题讨论】:

    标签: java virtual device midi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      相关资源
      最近更新 更多