【问题标题】:Referencing and playing a mp3 file from within a Java project在 Java 项目中引用和播放 mp3 文件
【发布时间】:2014-12-30 05:07:10
【问题描述】:

我目前正在开发一个在单击按钮时将播放某些歌曲的项目。 我现在让我的代码正常工作,以便它正确播放 mp3 文件,但这不是我想要的方式。现在我只是从我的桌面引用 mp3 文件,但我希望能够从项目本身引用它。我创建了一个名为 resources 的源文件夹,并且在其中有一个名为 music 的文件夹,我将 mp3 文件放入其中。不过,我在弄清楚如何正确引用 mp3 文件时遇到了麻烦。

这是我当前在桌面上播放歌曲的代码:

import java.io.BufferedInputStream;
import java.io.FileInputStream;

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

    // run in new thread to play in background
    new Thread() {
        public void run() {
            try {
                player.play();
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }.start();

}

// test client
public static void main(String[] args) {
    String filename = "/Users/username/desktop/LoveStory.mp3";
    MP3 mp3 = new MP3(filename);
    mp3.play();

    // when the computation is done, stop playing it
    mp3.close();

    // play from the beginning
    mp3 = new MP3(filename);
    mp3.play();

}

}

【问题讨论】:

    标签: java audio mp3


    【解决方案1】:

    将它放在resources 目录中,就像你所做的那样,然后用这样的方式引用它:

    MP3.class.getResource("/resources/LoveStory.mp3");
    

    这样做的好处是它应该可以在.jar 文件中工作,但也可以在 Eclipse(或您正在使用的任何东西)中工作。

    如果您希望它是 InputStream,看起来就像您想要的那样,那么您可以使用 getResourceAsStream() 方法:

    InputStream stream = MP3.class.getClassLoader().getResourceAsStream("/resources/LoveStory.mp3");
    

    resources 目录的确切放置位置取决于您的设置,但在 src 中可能是正确的。

    【讨论】:

    • 谢谢!这似乎让我更接近了,但是我仍然遇到问题,这可能来自我不知道将 InputStream 放在我的代码中的确切位置。我尝试在我之前引用文件的地方替换它,所以我写了这个: InputStream stream = MP3.class.getClassLoader() .getResourceAsStream("/resources/LoveStory.mp3"); BufferedInputStream bis = new BufferedInputStream(stream);玩家 = 新玩家(二);但是,这给了我一个比特流错误代码 102,我不知道为什么
    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2012-08-30
    • 2012-08-21
    相关资源
    最近更新 更多