SC-88VLなんて中途半端な機器を、むかし買ったことがあったっけw
SC-88PROはやたら高かったんで、買う気になれんかった。なんて学生時代の記憶が。。
いまだにヤフオクで売っててびっくりした。
MidiSystemを使って、MIDIファイルを再生するサンプル
MidiSystemを使って、MIDIファイルを再生します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import java.io.FileInputStream; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequence; import javax.sound.midi.Sequencer; public class MidiFilePlayerTest { public static void main(String[] args) { try(FileInputStream fis = new FileInputStream("c:\\work\\hoge.mid"); Sequencer sequencer = MidiSystem.getSequencer()) { //シーケンサーを開く sequencer.open(); //MIDIファイルを読み込んで、シーケンスを作成 Sequence sequence = MidiSystem.getSequence(fis); //シーケンサーにシーケンスをセットして再生 sequencer.setSequence(sequence); sequencer.start(); //終わるまで待つ while(sequencer.isRunning()) { Thread.sleep(100); } } catch (Exception e) { e.printStackTrace(); } } } |
実行結果
MIDIファイルが再生されます♪
サンプルの解説
まず、ここで出てくるシーケンサーとはMIDIプレイヤー。シーケンスとは楽譜(MIDIファイルの中身)と思ってください。
んで、処理としては、MidiSystem.getSequencer()でシーケンサーを取得。
つぎに、MidiSystem.getSequence(InputStream)で、MIDIファイルをもとにシーケンスを作成。
Sequencer#setSequence(Sequence)でシーケンサーにシーケンスをセット。
あとは、Sequencer#start()で再生できます。
ただし、再生は、start()という名のとおり、別スレッドで実行されます。
ですので、このサンプルではSequencer#isRunning()で、再生しているかどうか状態を確認しています。