Swing/MidiSystem の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/MidiSystem へ行く。
- Swing/MidiSystem の差分を削除
--- 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] `MidiSystem`から`Sequencer`を作成取得し、`MIDI`ファイルを演奏します。 #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTP2Xw5rXI/AAAAAAAAAeo/3v8-ggh9ZBE/s800/MidiSystem.png) * サンプルコード [#sourcecode] #code(link){{ URL url = getClass().getResource("Mozart_toruko_k.mid"); Sequencer sequencer; try { Sequence s = MidiSystem.getSequence(url); sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.setSequence(s); } catch (Exception ex) { ex.printStackTrace(); return; } startButton = new JButton(new AbstractAction("start") { @Override public void actionPerformed(ActionEvent e) { sequencer.start(); 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); }); }} * 解説 [#explanation] `MidiSystem.getSequencer`メソッドで`Sequencer`を取得し、これに`MidiSystem.getSequence`メソッドで`MIDI`ファイルから生成した`Sequence`を設定します。 `Sequencer#start()`メソッドで演奏を開始できます。 * 参考リンク [#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