一時停止や音量調節などまだまだ実装していないが、とりあえず再生と停止だけできる。
今回はJLayerを利用させてもらった。
http://www.javazoom.net/javalayer/sources.html
プログラムを作るうえで参考にさせてもらったサイト様は
http://labs.unoh.net/2007/11/javamp3.html
修正しました
http://akis-i.blogspot.jp/2013/02/javamp320130226.html
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class AKIMPer extends Thread {
// variable
private Player player;
private BufferedInputStream stream;
private Boolean is_run;
// constructor
public AKIMPer() {
setStopper();
}
public AKIMPer(String file) {
setStopper();
setFile(file);
}
// methods
public void start() {
is_run = true;
super.start();
}
public void stopMusic() {
try {
if (player != null) {
player.close();
}
if (stream != null) {
stream.close();
}
} catch (IOException e) {
System.out.println("IOException");
} finally {
setStopper();
}
}
public void run() {
if (stream == null || player == null || !is_run) {
stopMusic();
} else
try {
player.play();
} catch (JavaLayerException e) {
System.out.println("JavaLayerException");
} finally {
System.out.println("End");
}
}
// setter & getter
public void setFile(String file) {
try {
stream = new BufferedInputStream((new FileInputStream(file)));
player = new Player(stream);
} catch (IOException e) {
// System.out.println("BUFFER ERR");
System.out.println("IOException");
} catch (JavaLayerException e) {
// System.out.println("PLAYER ERR");
System.out.println("JavaLayerException");
}
}
public void setStopper() {
player = null;
stream = null;
is_run = false;
}
public boolean getIs_run(){
return is_run;
}
}
使い方コンストラクタにmp3のpathを入れる
start()で音楽を再生するこの時、音楽は別のメソッドで動いているので
例えば、画像のスライドショーとかも作れる。
stopMusic()で音楽再生を止める。
参考ソース
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
AKIMPer akimper= new AKIMPer("mp3/test.mp3");
Scanner in = new Scanner(System.in);
int temp = 0;
akimper.start();
while(akimper.getIs_run()){
System.out.print("(closing -> 1 ) >_");
temp = in.nextInt();
if(temp==1)
akimper.stopMusic();
}
}
}
問題点:
ループさせたりするなどの2回目の再生行為でエラーが起きる。
対策方法はもう一度インスタンスを作るなどである。
0 件のコメント:
コメントを投稿