java midi Hello java sound〜javax.sound.midiでハローワールド〜

今回は、JavaでMidiを扱うための実装をしていきます。やはり、初めにハローワールドをやります。これにより基本的な情報を集めます。

具体的に

<作成したテストコード>

private void printInfo(MidiDevice.Info info) {
    System.out.println("*** Name ***");
    System.out.println(info.getName());
    System.out.println("*** Vendor ***");
    System.out.println(info.getVendor());
    System.out.println("*** Description ***");
    System.out.println(info.getDescription());
}

@Test
public void testMidiCreator() {
    MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
    int i = 0;
    for (MidiDevice.Info inf : infos) {
        System.out.println("*** Info" + i + " ***");
        printInfo(inf);
        i++;
    }
    System.out.println("// シーケンサ");
    // シーケンサー
    printInfo(target.getSeq().getDeviceInfo());
    System.out.println("// シンセサイザ");
    // シンセサイザ
    printInfo(target.getSynth().getDeviceInfo());
}

<テスト対象クラス(実装するクラス)>

private Sequencer seq;
private Transmitter seqTrans;
private Synthesizer synth;
private Receiver synthRcvr;

/** コンストラクタ */
public MidiCreator() {
    try {
          seq = MidiSystem.getSequencer();
          seqTrans = seq.getTransmitter();
          synth = MidiSystem.getSynthesizer();
          synthRcvr = synth.getReceiver(); 
          seqTrans.setReceiver(synthRcvr);  
    } catch (MidiUnavailableException e) {
        e.printStackTrace();
          // handle or throw exception
    }
}
/** ゲッターとセッターは省略します */

そして、実行結果

////// init //////
*** Info0 ***
*** Name ***
Gervill
*** Vendor ***
OpenJDK
*** Description ***
Software MIDI Synthesizer
*** Info1 ***
*** Name ***
Real Time Sequencer
*** Vendor ***
Oracle Corporation
*** Description ***
Software sequencer
// シーケンサ
*** Name ***
Real Time Sequencer
*** Vendor ***
Oracle Corporation
*** Description ***
Software sequencer
// シンセサイザ
*** Name ***
Gervill
*** Vendor ***
OpenJDK
*** Description ***
Software MIDI Synthesizer

これはコンソールに出力した結果です。
そして実行画像は下にあります。

これは、Microbitからのメッセージを受けてMIDI音源を鳴らすための仕組みづくりの一環です。

作成したコードはGithubにアップしています。

ちなみに、MIDIを再生する順序は以下のようになります。

MIDIの再生

  1. デバイスを読み込むMidiSystem.getSequencer();
  2. Midiファイル(*.midなど)を読み込むnew File("midiファイルへのパス");
  3. 再生するデバイスにシーケンス(MIDIファイル)をセット
    Sequence mySeq = MidiSystem.getSequence(midi);
    seq.setSequence(mySeq);
  4. 再生処理seq.start();
  5. 再生する時間分処理を停止するThread.sleep(10000);
  6. 再生処理を停止するseq.stop();

こんな感じです。
実際に処理が動いて音がなるとわかっていても感動するものがあります。

でわでわ。。。



投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す