今回もGUIでMIDI再生

これまでと同様に、GUIでMIDI再生を行えるようにした。

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.sound.midi.*;

class MidiPlayer2 {
  static JFrame frame;
  static JButton playButton, stopButton;
  static JLabel counterLabel;
  static JProgressBar pBar;
  static int maxLength;
  static Sequencer sqr;

  public static void main(String[] args) {
    File file = new File("tamji02.mid");
    maxLength = -1;
    if(file.exists()) {
      try {
        sqr = MidiSystem.getSequencer();
        sqr.setLoopCount(0);
        sqr.open();
        FileInputStream fis = new FileInputStream(file.getName());
        Sequence sq = MidiSystem.getSequence(fis);
        fis.close();
        sqr.setSequence(sq);
        maxLength = (int)sqr.getMicrosecondLength();
        MidiPlayer2 mp2 = new MidiPlayer2();
        frame.setVisible(true);
        while(true) {
          int nowPosition = (int)sqr.getMicrosecondPosition();
          counterLabel.setText(nowPosition + "/" + maxLength);
          pBar.setValue(nowPosition);
          Thread.sleep(500);
          playButton.setEnabled(!sqr.isRunning());
          stopButton.setEnabled(sqr.isRunning());
          if(maxLength == nowPosition) {
            sqr.setMicrosecondPosition(0);
          }
        }
      } catch(Exception e) {
        e.printStackTrace();
      }
    } else {
      System.out.println("ファイルが見つかりませんでした。");
      System.exit(1);
    }
  }

  MidiPlayer2() {
    frame = new JFrame("ClipPlayer2");
    playButton = new JButton("再生");
    stopButton = new JButton("停止");
    stopButton.setEnabled(false);
    ActionListener al = new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        if(ae.getSource() == playButton) {
          playButton.setEnabled(false);
          stopButton.setEnabled(true);
          sqr.start();
        } else {
          playButton.setEnabled(true);
          stopButton.setEnabled(false);
          sqr.stop();
        }
      }
    };
    playButton.addActionListener(al);
    stopButton.addActionListener(al);
    counterLabel = new JLabel("0", JLabel.RIGHT);
    pBar = new JProgressBar(0, maxLength);
    frame.getContentPane().setLayout(new FlowLayout());
    frame.add(playButton);
    frame.add(stopButton);
    frame.add(counterLabel);
    frame.add(pBar);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(350,100);
    frame.setLocationRelativeTo(null);
  }

}

これを「MidiPlayer2.java」として保存し、コンパイルすればOK。前回拾ったMIDIファイルを同じディレクトリに置いて実行すれば再生・一時停止が可能。

GUIを付けたことで気になったことがある。再生までに時間が少しかかったのは、そもそも最初の方に音が存在していなからかもしれない。でも、もしかしたら、このPCでは処理が遅く、Progressバーの動きが遅れているだけなのかもしれない。

コメント
コメントする








   
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>

selected entries

categories

archives

links

profile

書いた記事数:84 最後に更新した日:2016/09/11

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM