import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
public class SamplePlayer {
public static void main(String[] args) {
// MIDIデータを再生するハードウェア/ソフトウェア・デバイスのインスタンス。
Sequencer sequencer = null;
try {
// デバイスに接続されたデフォルトのSequencerを取得する。
sequencer = MidiSystem.getSequencer();
// デバイスを開き、リソースを獲得する。
sequencer.open();
}
catch (MidiUnavailableException e) {
e.printStackTrace();
}
// コンソール入力からMIDIファイルのパスを取得する。
Scanner scanner = new Scanner(System.in);
System.out.print("MIDIファイルのパス >> ");
String path = scanner.next();
try {
// MIDIファイルからMIDIデータ(Sequenceオブジェクト)を取得。
File file = new File(path);
Sequence sequence = MidiSystem.getSequence(file);
// 取得したMIDIデータをシーケンサに設定する。
sequencer.setSequence(sequence);
}
catch (InvalidMidiDataException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
// シーケンサー再生
sequencer.start();
// キー入力待ち
System.out.println("適当に文字列を入力すると終了します。");
System.out.print(">>");
scanner.next();
scanner.close();
// シーケンサー停止
sequencer.stop();
// シーケンサーを閉じ、使用していたリソース解放する。
sequencer.close();
}
}