概要

MidiSystemからSequencerを作成取得し、MIDIファイルを演奏します。

サンプルコード

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);
});
View in GitHub: Java, Kotlin

解説

MidiSystem.getSequencerメソッドでSequencerを取得し、これにMidiSystem.getSequenceメソッドでMIDIファイルから生成したSequenceを設定します。

Sequencer#start()メソッドで演奏を開始できます。

参考リンク

コメント