Swing/MidiSystem のバックアップの現在との差分(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/MidiSystem へ行く。
- 1 (2006-02-27 (月) 16:12:26)
- 2 (2007-03-28 (水) 19:24:33)
- 3 (2008-11-21 (金) 11:57:22)
- 4 (2013-03-15 (金) 16:53:52)
- 5 (2013-10-12 (土) 20:10:06)
- 6 (2014-12-28 (日) 15:04:28)
- 7 (2016-04-15 (金) 12:42:09)
- 8 (2016-09-20 (火) 05:00:21)
- 9 (2017-10-27 (金) 13:37:15)
- 10 (2018-09-12 (水) 20:00:51)
- 11 (2020-09-09 (水) 11:26:07)
- 12 (2022-03-24 (木) 15:56:43)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:MIDIファイルの演奏 #navi(../) #tags(Sound, MidiSystem) RIGHT:Posted by &author(aterai); at 2006-01-09 * MIDIファイルの演奏 [#q50a5f5c] ``MidiSystem``から``Sequencer``を作成取得し、``MIDI``ファイルを演奏します。 --- 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`ファイルを演奏します。 - &jnlp; - &jar; - &zip; #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTP2Xw5rXI/AAAAAAAAAeo/3v8-ggh9ZBE/s800/MidiSystem.png) #ref(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTP2Xw5rXI/AAAAAAAAAeo/3v8-ggh9ZBE/s800/MidiSystem.png) ** サンプルコード [#s9901c5c] * サンプルコード [#sourcecode] #code(link){{ URL url = getClass().getResource("Mozart_toruko_k.mid"); final Sequencer sequencer; try{ Sequence s = MidiSystem.getSequence(url); sequencer = MidiSystem.getSequencer(); sequencer.open(); sequencer.setSequence(s); }catch(Exception e) { e.printStackTrace(); return; } start = new JButton(new AbstractAction("start") { public void actionPerformed(ActionEvent ae) { 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); }); }} ** 解説 [#f3cdbcb2] ``MidiSystem.getSequencer``メソッドで``Sequencer``を取得し、これに``MidiSystem.getSequence``メソッドで``MIDI``ファイルから生成した``Sequence``を設定します。 * 解説 [#explanation] `MidiSystem.getSequencer`メソッドで`Sequencer`を取得し、これに`MidiSystem.getSequence`メソッドで`MIDI`ファイルから生成した`Sequence`を設定します。 ``Sequencer.start``メソッドで演奏を開始することができます。 `Sequencer#start()`メソッドで演奏を開始できます。 ** 参考リンク [#h23d44e1] * 参考リンク [#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]] ** コメント [#u2657308] * コメント [#comment] #comment #comment