「Java/swing/サンプル/MP3プレイヤーサンプル(JLayer,BasicPlayer)」の編集履歴(バックアップ)一覧に戻る

Java/swing/サンプル/MP3プレイヤーサンプル(JLayer,BasicPlayer) - (2012/11/28 (水) 07:12:04) のソース

&ref(BasicPlayerでMP3再生.png)

* サンプルダウンロード
ソース:&ref(BasicPlayerSample.java)
実行可能形式:&ref(BasicPlayerSample.zip)

* サンプルソース BasicPlayerSample.java
#highlight(java){{
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetAdapter;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.io.File;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSeparator;

import javazoom.jlgui.basicplayer.BasicController;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;

// JMF MP3 Plugin
// http://www.oracle.com/technetwork/java/javase/download-137625.html
public class BasicPlayerSample extends JFrame {

	// ベーシックプレイヤー
	BasicPlayer player;

	// Swing用変数、定数
	// ボタン用テキスト 停止
	final static String STOP = "Stop";
	// ボタン用テキスト 再生
	final static String PLAY = "Play";
	// ボタン用テキスト 一時停止
	final static String PAUSE = "Pause";
	// タイトル
	final static String TITLE = "BasicPlayerでmp3再生";
	final static String FILE_NAME = "ファイル名:";
	// 再生ボタン
	JButton bPlay;
	// 曲名ラベル
	JLabel label;

	public static void main(String[] args) {
		new BasicPlayerSample();
	}

	// コンストラクタ
	public BasicPlayerSample() {
		setTitle(TITLE);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(200, 100, 300, 100);
		setLayout(new FlowLayout());

		// ドロップターゲット設定
		new DropTarget(this, DnDConstants.ACTION_COPY,
				new MyDropTargetListener());

		// ラベル設置
		label = new JLabel(" mp3ファイルをドロップしてください。");
		label.setPreferredSize(new Dimension(getWidth() - 10, 20));
		add(label);
		add(getHr(2000, 0));

		// 再生、停止ボタン設置
		bPlay = new JButton(PLAY);
		bPlay.addActionListener(new bPlayAction());
		JButton bStop = new JButton(STOP);
		bStop.addActionListener(new bStopAction());
		add(bPlay);
		add(bStop);

		// BasicPlayerのインスタンス作成
		player = new BasicPlayer();

		setVisible(true);

		addComponentListener(new ComponentAdapter() {
			// ウィンドウサイズが変化したらラベルのサイズ変更
			@Override
			public void componentResized(ComponentEvent e) {
				label.setPreferredSize(new Dimension(getWidth() - 10, 20));
			}
		});

	}

	// 水平線
	public JSeparator getHr(int width, int hight) {
		JSeparator sp = new JSeparator(JSeparator.HORIZONTAL);
		sp.setPreferredSize(new Dimension(width, hight));
		return sp;
	}

	// 再生ボタンのアクションクラス
	class bPlayAction implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			try {
				int status = player.getStatus();
				if (status == BasicPlayer.PAUSED) {
					// 一時停止の場合、一時停止を解除します
					resume();
				} else if (status == BasicPlayer.STOPPED) {
					// 停止中の場合、再生開始します
					play();
				} else if (status == BasicPlayer.PLAYING) {
					// 再生中の場合、一時停止します
					pause();
				}
			} catch (Exception ex) {
				// 握りつぶす
			}
		}
	}

	// 停止ボタンのアクションクラス
	class bStopAction implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			try {
				stop();
			} catch (Exception ex) {
				// 握りつぶす
			}
		}
	}

	// 一時停止
	private void pause() throws BasicPlayerException {
		// playMode = PLAY_MODE_PAUSE;
		player.pause();
		bPlay.setText(PLAY);
	}

	// 一時停止解除
	private void resume() throws BasicPlayerException {
		player.resume();
		bPlay.setText(PLAY);
	}

	// 再生
	private void play() throws BasicPlayerException {
		player.play();
		bPlay.setText(PAUSE);
	}

	// 停止
	private void stop() throws BasicPlayerException {
		player.stop();
		bPlay.setText(PLAY);
	}

	// 開く
	private void open(File file) throws BasicPlayerException {
		// ラベル設定
		label.setText(FILE_NAME + file.getName());
		// 取得したファイルを開く
		player.open(file);
		play(); // 再生
	}

	// ドロップターゲットリスナー
	// ドロップされたファイルを受け取り、最初のファイルだけを再生します
	class MyDropTargetListener extends DropTargetAdapter {
		@Override
		public void drop(DropTargetDropEvent dtde) {
			dtde.acceptDrop(DnDConstants.ACTION_COPY);
			boolean b = false;
			try {
				if (dtde.getTransferable().isDataFlavorSupported(
						DataFlavor.javaFileListFlavor)) {
					b = true;
					List<File> list = (List<File>) dtde.getTransferable()
							.getTransferData(DataFlavor.javaFileListFlavor);

					// 最初のファイルだけ取得
					File file = list.get(0);
					open(file);
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				dtde.dropComplete(b);
			}
		}
	}
}
}}

* 解説
特に難しい事もなく、ダウンロードしたBasicPlayerのzipに入っていた「BasicPlayerSample」を真似してちょいちょいと書いたら簡単にできてしまいました。
自力でマルチスレッドする必要もなく、BasicPlayerのインスタンスを作成して、mp3ファイルオープンして、playメソッドを呼ぶだけ。
stop()で停止、pause()で一時停止、resume()で再開、簡単にmp3が再生できます。