Newer
Older
ASS2021Java / src / SamplePlayer.java
@Motoki Miura Motoki Miura on 26 Oct 2021 1 KB FactoryMethod
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();
    }
}