2

Java で仮想 MIDI ポートを使用するために、snd-virmidi カーネル モジュールをインストールしました。これらの MIDI ポートのおかげで、Java は Linux 上の Java 以外の MIDI ソフトウェア シンセサイザーに接続できます。

しかし、openjdk はこれらの仮想 MIDI ポートを検出するのに長い時間がかかります...さらに、「aconnect」コマンド ラインで仮想ポートが 4 つしかないと通知されている間に、仮想ポートの長いリストを検出します...

impro-visor (Java ソフトウェア) と現在の開発 (MIDI アプリケーション) でこの動作を確認しました。

Ubuntu 12.04 で openjdk 7 を使用しています。

これは、さまざまなキー MIDI メソッドの時間応答をテストするために使用したコードです。

public static void main(String[] args) throws Exception {
    long start = new Date().getTime();
    Sequencer sequencer = MidiSystem.getSequencer(true);
    long end = new Date().getTime();
    System.out.println("getSequencer true end : " + (end - start) + " ms");

    start = new Date().getTime();
    sequencer = MidiSystem.getSequencer(false);
    end = new Date().getTime();
    System.out.println("getSequencer false end : " + (end - start) + " ms");

    start = new Date().getTime();
    List<String> outputDeviceList = new ArrayList<String>();

    // Obtain information about all the installed synthesizers.
    MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();

    // Scan all found devices and check to see what type they are
    MidiDevice device = null;
    for (MidiDevice.Info info : infos) {
        try {
            device = MidiSystem.getMidiDevice(info);
        } catch (MidiUnavailableException e) {
            continue;
        }
        if (device instanceof Synthesizer) {
            outputDeviceList.add(info.getName());
            continue;
        }
        if (!(device instanceof Synthesizer)
                && !(device instanceof Sequencer)) {
            // The device is an instance of a hardware Midi port.
            int numReceivers = device.getMaxReceivers();

            if (numReceivers != 0) {
                outputDeviceList.add(info.getName());
            }
        }
    }
    end = new Date().getTime();
    System.out.println("getAllOutputDevice end : " + (end - start) + " ms");
}

上記のコードは、openjdk を使用して i3 Intel プロセッサ (Ubuntu 12.04) で実行されています。

java version "1.7.0_15"
OpenJDK Runtime Environment (IcedTea7 2.3.7) (7u15-2.3.7-0ubuntu1~12.04.1)
OpenJDK Server VM (build 23.7-b01, mixed mode)

次の出力が得られます。

getSequencer true end : 20811 ms
getSequencer false end : 6945 ms
getAllOutputDevice end : 13933 ms

snd-virmidi カーネル モジュールをアンロードすると、結果は次のようになります。

getSequencer true end : 412 ms
getSequencer false end : 5 ms
getAllOutputDevice end : 11 ms

Java 仮想 MIDI ポートの検出とシーケンサーの初期化プロセスを高速化する方法はありますか?

4

0 に答える 0