2013-06-02 141 views
4

我该如何添加播放/暂停按钮到下面的代码?如何使用JavaZOOM JLayer库播放/暂停mp3文件?

import javazoom.jl.player.Player; 

try{ 
    FileInputStream fis = new FileInputStream("mysong.mp3"); 
    Player playMP3 = new Player(fis); 
    playMP3.play(); 
} 
catch(Exception exc){ 
    exc.printStackTrace(); 
    System.out.println("Failed to play the file."); 
} 
+0

这个线程应该可以帮助你,它涵盖了一切很漂亮:http://stackoverflow.com/questions/6045384/playing-mp3-and-wav-in-java – Bloodcount

+0

使用MediaPlayer类 – Dejan

+5

我真的不知道为什么这个问题被关闭了。我知道答案,我只是在输入它.OP不使用通常的JMF,并且提出了一个非常简单的问题,它有一个可能不明显的答案。当然,这不是有史以来表现最好的问题,但它对我来说很有意义。 –

回答

5

你需要使用AdvancedPlayer类,而不是仅仅Player,因为简单的一个不能真正开始播放中间的文件。

您需要添加一个PlaybackListener并监听stop()方法。那么你可以简单地从你离开的那一刻开始。

private int pausedOnFrame = 0; 

AdvancedPlayer player = new AdvancedPlayer(fis); 
player.setPlayBackListener(new PlaybackListener() { 
    @Override 
    public void playbackFinished(PlaybackEvent event) { 
     pausedOnFrame = event.getFrame(); 
    } 
}); 
player.play(); 
// or player.play(pausedOnFrame, Integer.MAX_VALUE); 

这将记住帧播放暂停(如果已暂停)。

现在,当暂停后再次按下Play时,您将检查pausedOnFrame是否是介于0和文件中帧数之间的数字,并调用play(int begin, int end)

请注意,在执行此操作之前,您应该知道文件中的帧数。如果不这样做,你可以尝试通过这种伎俩发挥所有的帧:

player.play(pausedOnFrame, Integer.MAX_VALUE); 

这就是说,API似乎并不在你的情况非常有帮助的,但它是你可以做的除了swiching最好到不同的图书馆。

+1

AdvancedPlayer的play()方法也在内部使用Integer.MAX_VALUE,所以它应该没问题。我快速查看了实现。 – Ivo

+1

我试图实现这一点,但在恢复我有一个随机点访问来跟踪...,我已经检查了event.getFrame(),它似乎传递的值不对应于我们正在听... –