首页 文章

用 mp3spi 播放一个带有 MP3 的 MP3

提问于
浏览
0

我正在 Eclipse IDE 中开发一个 Java 项目。我想将项目部署到 jar-file。让音频运行是我不同寻常的部分。我正在使用 javazoom 的 mp3spi 库来播放 mp3 文件。 (http://www.javazoom.net/mp3spi/sources.html)

我实现了我的 AudioPlayer,就像 javazoom 网站上的示例一样.(http://www.javazoom.net/mp3spi/documents.html)

我可以再次在这里发布冗长的代码,但是我的 AudioPlayer 扩展 Thread 以便它可以独立播放的差别几乎相同。 (它在开发环境中工作得很好)

我遇到的问题是,当我将项目导出到 jar 中时,我无法运行它。我发现这个主题已经有很多问题和建议,我尝试了大部分内容。可悲的是,我仍然没有一个有效的解决方案。我确定它在那里但是在这一点上我可能会想念森林里的树木。

所有必需的库(jl1.0.1.jar,tritonus_share.jar 和 mp3spi1.9.5.jar)都在我的 jar 中并添加到类路径中。

代码的典型点似乎是 AudioInputStream(在示例中的第 10 行),它创建了一个 File。

第一次尝试 - javazoom.net 上建议的代码:

File file = new File("src/resources/audio/test.mp3");
AudioInputStream ain = AudioSystem.getAudioInputStream(file);

会发生什么:

Eclipse IDE:工作正常,mp3 播放。

导出 jar-File:Jar 工作,但 mp3 不播放。

使用 Windows 控制台导出 jar-File opend:Jar 工作但 mp3 无法播放。

错误消息:at audio.AudioPlayer.run(AudioPlayer.java:40)java.io.FileNotFoundException:src\resources_ audio_ test.mp3

所以我不能在 jar 中使用“File”,因为我不处理文件系统中的文件而是处理 jar 中的文件。

第二次尝试

URL url = ClassLoader.getSystemResource("resources/audio/test.mp3");
AudioInputStream ain = AudioSystem.getAudioInputStream(url);

会发生什么:

Eclipse IDE:工作正常,mp3 播放。

导出 jar-File:Jar 工作,但 mp3 不播放。

使用 Windows 控制台导出 jar-File opend:Jar 工作但 mp3 无法播放。

错误消息:javax.sound.sampled.UnsupportedAudioFileException:无法从 javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown 源处的输入 URL 获取音频输入流)audio.AudioPlayer.run(AudioPlayer.java:40)

我无法从 URL 获取 AudioInputStream?我不知道。让我们来......

第 3 次和第 4 次尝试

尝试 3:

BufferedInputStream myStream = new BufferedInputStream(getClass().getResourceAsStream("/resources/audio/test.mp3"));
AudioInputStream ain = AudioSystem.getAudioInputStream(myStream);

尝试 4:

BufferedInputStream myStream = new BufferedInputStream(ClassLoader.getSystemResourceAsStream("resources/audio/test.mp3"));
AudioInputStream ain = AudioSystem.getAudioInputStream(myStream);

同样,结果都是在 Eclipse IDE 中播放,而不是在 jar 中播放。

使用 Windows 控制台导出 jar-File opend:Jar 工作但 mp3 无法播放。

错误消息:javax.sound.sampled.UnsupportedAudioFileException:无法从 javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown 源处的输入流获取音频输入流)audio.AudioPlayer.run(AudioPlayer.java:40)

我真的迷失在这里。任何帮助将非常感激。

相关话题:

Java 的文件路径或文件位置 - 新 file()

使用相对路径在 JAR 中读取文件

Java Audio Stream(mp3spi lib),UnsupportedAudioFileException

用 java 压缩音乐罐?

1 回答

  • 0

    我以前总是将我的项目导出为 jar,所有以类似方式加载的图像都会正确加载,而音频文件则不会。

    现在,我试图将我的项目导出为可运行的 jar,它工作正常(尝试 4,也许还有其他尝试)。以下问题和答案解释了 jar 和 runnable jar 之间的区别。

    Java Eclipse:作为 JAR 导出和作为 Runnable JAR 导出之间的区别

    清单文件如何影响正确的资源加载

    ClassLoader.getSystemResourceAsStream
    

    超出我的范围,但显然确实如此。

    有人可能想详细说明那些 maifest 文件,因为我真的不能。或者,jar 和可运行 jar 的导出之间可能存在其他差异。

    由于我有一个有效的解决方案,我现在已经完成了这个主题。

相关问题