---
category: swing
folder: MidiSystem
title: MIDIファイルの演奏
tags: [Sound, MidiSystem]
author: aterai
pubdate: 2006-01-09T18:08:23+09:00
description: MidiSystemからSequencerを作成取得し、MIDIファイルを演奏します。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTP2Xw5rXI/AAAAAAAAAeo/3v8-ggh9ZBE/s800/MidiSystem.png
---
* Summary [#summary]
`MidiSystem`から`Sequencer`を作成取得し、`MIDI`ファイルを演奏します。
#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTP2Xw5rXI/AAAAAAAAAeo/3v8-ggh9ZBE/s800/MidiSystem.png)
* Source Code Examples [#sourcecode]
#code(link){{
URL url = getClass().getResource("Mozart_toruko_k.mid");
URL url = getClass().getResource("Mozart_toruko_k.mid");
SwingWorker<Void, Long> worker = new SwingWorker<Void, Long>() {
private long tickPos;
@Override protected Void doInBackground() throws InterruptedException {
try (Sequencer sequencer = MidiSystem.getSequencer()) {
sequencer.open();
sequencer.setSequence(MidiSystem.getSequence(url));
sequencer.addMetaEventListener(e -> {
if (e.getType() == END_OF_TRACK) {
publish(0L);
}
});
EventQueue.invokeLater(() -> addListener(sequencer));
while (sequencer.isOpen()) {
updateTickPosition(sequencer);
}
} catch (InvalidMidiDataException | MidiUnavailableException | IOException ex) {
ex.printStackTrace();
publish(0L);
} finally {
System.out.println("try-with-resources: AutoCloseable");
}
return null;
}
// ...
JButton start = new JButton("start");
start.addActionListener(e -> {
sequencer.setTickPosition(tickPos);
sequencer.start();
initButtons(false);
});
}}
* Description [#explanation]
* Description [#description]
`MidiSystem.getSequencer`メソッドで`Sequencer`を取得し、これに`MidiSystem.getSequence`メソッドで`MIDI`ファイルから生成した`Sequence`を設定します。
`Sequencer#start()`メソッドで演奏を開始できます。
* Reference [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/sound/midi/MidiSystem.html MidiSystem (Java Platform SE 8)]
- [http://muimi.com/j/game/sound/ Javaでゲーム - サウンドメモ]
- [http://classic-midi.com/ クラシックMIDI ラインムジーク]
- [[Wavファイルの演奏>Swing/Sound]]
- [[Beep音を鳴らす>Swing/Beep]]
- [[AuditoryCuesでイベント音を設定する>Swing/AuditoryCues]]
* Comment [#comment]
#comment
#comment