【问题标题】:How to Play/Pause a mp3 file using the JavaZOOM JLayer library?如何使用 JavaZOOM JLayer 库播放/暂停 mp3 文件?
【发布时间】:2013-05-28 18:06:53
【问题描述】:

如何在以下代码中添加播放/暂停按钮?

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.");
}

【问题讨论】:

  • 这个帖子应该可以帮助你,它很好地涵盖了所有内容:stackoverflow.com/questions/6045384/playing-mp3-and-wav-in-java
  • 使用 MediaPlayer 类
  • 我真的不知道为什么这个问题被关闭了。我知道答案,我只是在输入它。OP 没有使用通常的 JMF,而是提出了一个非常简单的问题,该问题的答案乍一看可能并不明显。当然,这不是有史以来最乖巧的问题,但对我来说很有意义。
  • @Slanec 如果你想输入所说的答案,它会重新打开。
  • @user2413200 Integer.MAX_VALUE 技巧有效吗?

标签: java


【解决方案1】:

您需要使用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);

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

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

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

player.play(pausedOnFrame, Integer.MAX_VALUE);

也就是说,API 在您的情况下似乎不是很有帮助,但除了切换到不同的库之外,这是您能做的最好的事情。

【讨论】:

  • AdvancedPlayer 的 play() 方法内部也是使用 Integer.MAX_VALUE 的,所以应该没问题。我快速浏览了实现。
  • 我也尝试过实现这一点,但是在恢复时我有一个随机点访问跟踪...,我检查了 event.getFrame(),似乎传递的值不是对应于我们正在听的...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2011-11-24
  • 2012-05-05
相关资源
最近更新 更多