bonar note

京都のエンジニア bonar の技術的なことや技術的でない日常のブログです。

USB MIDI アダプタ経由だと DeviceInfo が正確に取れない件

CASIOの電子ピアノ Privia 720C を購入しました。

[rakuten:menet:10002898:detail]

ピアノを買うのにCASIOっていう迷いはなくはなかったですが、実際に現物を見て、このコンパクトさと値段の安さに惹かれました。無駄な物があんまりないというのもいいですね。ただ、MIDI接続がUSBじゃない(他のもほとんどそうだった)ので、以下のUSBアダプタを購入。

[rakuten:dj:10005015:detail]

接続して以下のコードでデバイスを確認

    public static void dumpDeviceInfo() {
        ArrayList<MidiDevice> devices = getDevices();

        for (int i = 0; i < devices.size(); i++) {
            MidiDevice device = devices.get(i);
            MidiDevice.Info info = device.getDeviceInfo();
            System.out.println("[" + i + "] devinfo: " + info.toString());
            System.out.println("  name:"        + info.getName());
            System.out.println("  vendor:"      + info.getVendor());
            System.out.println("  version:"     + info.getVersion());
            System.out.println("  description:" + info.getDescription());
            if (device instanceof Synthesizer) {
                System.out.println("  SYNTHESIZER");
            }
            if (device instanceof Sequencer) {
                System.out.println("  SEQUENCER");
            }
            System.out.println("");
        }
    }

するとこんな感じで

[0] devinfo: nanoKEY - KEYBOARD
  name:nanoKEY - KEYBOARD
  vendor:KORG INC.
  version:1.0
  description:KEYBOARD

[1] devinfo: UM-1G - UM-1G
  name:UM-1G - UM-1G
  vendor:Roland
  version:1.0
  description:UM-1G

[2] devinfo: nanoKEY - CTRL
  name:nanoKEY - CTRL
  vendor:KORG INC.
  version:1.0
  description:CTRL

[3] devinfo: UM-1G - UM-1G
  name:UM-1G - UM-1G
  vendor:Roland
  version:1.0
  description:UM-1G

[4] devinfo: Real Time Sequencer
  name:Real Time Sequencer
  vendor:Sun Microsystems
  version:Version 1.0
  description:Software sequencer
  SEQUENCER

[5] devinfo: Java Sound Synthesizer 
  name:Java Sound Synthesizer 
  vendor:Sun Microsystems
  version:Version 1.0
  description:Software wavetable synthesizer and receiver  SYNTHESIZER 

UM-1G というUSBアダプタしか見えてないようなのです(cakewalkはRolandのブランド)。入力に関しては [1] devinfo: UM-1G - UM-1G の方から普通に取れてるっぽいのでいいのですが、[3] devinfo: UM-1G - UM-1G のほうが instanceof Synthesizer じゃないのでピアノの内部音源で音を鳴らす事が出来ないのです。これでは魅力半減です。。

フォーラムでだいぶ昔に同じようなシチュエーションの質問を見つけましたが、レス付いてないですね。
Sound.midi.*; need to create an instance of an external synthesizer.

サウンドカードのJOYSTICKポートとかと接続するとちゃんと見えるのかな、、謎です。ググってもそれっぽいものがないので、僕が何か根本的な勘違いをしてる可能性もあり、長時間ハマってます。

うーんうーん。