用Java播放MP3块?

时间:2014-02-10 14:14:18

标签: java stream mp3

遗憾的是,Java内部的MP3支持缺乏。我正在开发一个需要接收大块MP3并播放它们的应用程序。我正在使用这样的Jlayer MP3库:

import javazoom.jl.player.Player;
public class MP3 {
    private String filename;
    private Player player; 

    // constructor that takes the name of an MP3 file
    public MP3(String filename) {
        this.filename = filename;
    }

    public void close() { if (player != null) player.close(); }

    // play the MP3 file to the sound card
    public void play() {
        try {
            FileInputStream fis     = new FileInputStream(filename);
            BufferedInputStream bis = new BufferedInputStream(fis);
            player = new Player(bis);
        }
        catch (Exception e) {
            System.out.println("Problem playing file " + filename);
            System.out.println(e);
        }

        player.play();
}

但我的问题是我只有完整MP3文件的块,我需要在它们到达时播放它们。还有更好的选择吗?

修改

发现一个有趣的类似问题:MP3 won't stream with JMF 另外:Decoding MP3 files with JLayer

1 个答案:

答案 0 :(得分:1)

创建一个实现InputStream的类,并在它们到达时接收块,但将字节提供给播放器。只需确保在请求字节时跟踪每个块中的位置,然后在烧掉它时丢弃块并开始提供下一个块中的数据。

由于玩家希望处理一个InputStream,因此它不会更明智。你可能不需要将它包装在BufferedInputStream中,因为你将在你的类中处理它。