一時停止や音量調節などまだまだ実装していないが、とりあえず再生と停止だけできる。
今回は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 件のコメント:
コメントを投稿