1

コンボボックスにすべての MIDI デバイスをリストしていますが、ループバック ドライバーのエントリが重複しています。

  • 最初のエントリは機能せず、説明が含まれていません ( getDescription() は「No details available」を返します)。
  • 動作している他のものは、「外部 MIDI ポート」の説明を返します。

ここで、rtpMidi、LoopBE、LoopMidi、およびすべてのループバック ドライバーがこれらの重複エントリを引き起こす理由を知りたいので、それらを安全な方法でリストから除外できます。有効な説明がなければエントリを避けることもできますが、そもそもそれらのエントリが報告される理由を知らずに行動するのは好きではありません。私を困惑させるもう1つのことは、「if(dev instanceof Receiver)」を介して結果をフィルタリングしようとすると、送信機、シンセサイザー、およびシーケンサーのインスタンスと同じように、空のリストが表示されることです。そのため、どの 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