MIDI を演奏する

MIDI ファイルを演奏する簡単なプログラムです。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして MidiPlay.java の名前で保存して下さい。
    // MIDI ファイルを演奏する簡単なプログラム
    import java.io.BufferedInputStream;
    import java.io.InputStream;
    import javax.sound.midi.*;
    
    public class MidiPlay
    {
        public static void main(String[] args) throws Exception
        {
            final Sequencer sequencer = MidiSystem.getSequencer();
            sequencer.open();
    /* MetaEventListener() は省略可能 */
            sequencer.addMetaEventListener(new MetaEventListener()
               {    public void meta(MetaMessage meta)
                    {   if (meta.getType() == 47)
                        {   //トラック終了
                            sequencer.close();
                            System.exit(0);
                        }
                    }
               });
    /* */
            InputStream is = new BufferedInputStream(MidiSample1.class.getResourceAsStream("midi.mid"));
            Sequence s = MidiSystem.getSequence(is);
            sequencer.setSequence(s);
            sequencer.start();
        }
    }
    
  2. プロジェクトのフォルダーに格納されている "midi.mid" を演奏しています。
    テストの時は適当な MIDI ファイルを調達して来て下さい。
    ただし、MIDI にも様々なバージョンがあり、全てのファイルを演奏出来るとは限りません。
    java のソースファイルをコンパイルして class オブジェクトを実行して下さい。
    MIDI の演奏が終わればプログラムが終了します。

プログラムの説明

  1. このプログラムはコンソールモードで作成されています。
    java.io.BufferedInputStream, java.io.InputStream, javax.sound.midi.* をインポートして下さい。
        import java.io.BufferedInputStream;
        import java.io.InputStream;
        import javax.sound.midi.*;
    
        public class MidiPlay
        {
        
  2. MidiSystem.getSequencer() で Sequencer をインスタンス化します。
    Sequencer をオープンします。
        public static void main(String[] args) throws Exception
        {
            final Sequencer sequencer = MidiSystem.getSequencer();
            sequencer.open();
        
  3. MetaEventListener() を設定して Midi の演奏が終わるとプログラムを終了します。
    getType() に 47 が返されるとトラック(演奏)の終了です。
    MetaEventListener() を省略することも出来ますが、演奏が終わっても終了しなくなります。
            sequencer.addMetaEventListener(new MetaEventListener()
               {    public void meta(MetaMessage meta)
                    {   if (meta.getType() == 47)
                        {   //トラック終了
                            sequencer.close();
                            System.exit(0);
                        }
                    }
               });
        
  4. あとは Midi をロードして演奏するだけです。
            InputStream is = new BufferedInputStream(MidiSample1.class.getResourceAsStream("midi.mid"));
            Sequence s = MidiSystem.getSequence(is);
            sequencer.setSequence(s);
            sequencer.start();
        

超初心者のプログラム入門(Java2)