Swing/MidiSystem のバックアップの現在との差分(No.3)
TITLE:MIDIファイルの演奏
MIDIファイルの演奏
Posted by terai at 2006-01-09- category: swing folder: MidiSystem title: MIDIファイルの演奏 tags: [Sound, MidiSystem] author: aterai pubdate: 2006-01-09T18:08:23+09:00 description: MidiSystemからSequencerを作成取得し、MIDIファイルを演奏します。 image:
概要
MidiSystem
からSequencer
を作成取得し、MIDI
ファイルを演奏します。
Screenshot
Advertisement
概要
MidiSystemからSequencerを作成取得し、MIDIファイルを演奏します。- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
URL url = getClass().getResource("Mozart_toruko_k.mid");
#spandel
final Sequencer sequencer;
#spanend
#spandel
try{
#spanend
Sequence s = MidiSystem.getSequence(url);
sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(s);
#spandel
}catch(Exception e) {
#spanend
e.printStackTrace();
return;
#spandel
}
#spanend
#spandel
start = new JButton(new AbstractAction("start") {
#spanend
public void actionPerformed(ActionEvent ae) {
sequencer.start();
#spanadd
URL url = getClass().getResource("Mozart_toruko_k.mid");
#spanend
#spanadd
SwingWorker<Void, Long> worker = new SwingWorker<Void, Long>() {
#spanend
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;
}
// ...
#spanadd
#spanend
#spanadd
JButton start = new JButton("start");
#spanend
#spanadd
start.addActionListener(e -> {
#spanend
sequencer.setTickPosition(tickPos);
sequencer.start();
initButtons(false);
});
解説
MidiSystem.getSequencerメソッドでSequencerを取得し、これにMidiSystem.getSequenceメソッドでMIDIファイルから生成したSequenceを設定します。 Sequencer.startメソッドで演奏を開始することができます。解説
MidiSystem.getSequencer
メソッドでSequencer
を取得し、これにMidiSystem.getSequence
メソッドでMIDI
ファイルから生成したSequence
を設定します。
参考リンク
- Javaでゲーム - サウンドメモ
- クラシックMIDI ラインムジーク
Sequencer#start()
メソッドで演奏を開始できます。