用mp3spi播放一个带有MP3的MP3

时间:2014-03-15 11:31:25

标签: java audio jar

我正在Eclipse IDE中开发一个Java项目。我想将项目部署到jar文件中。让音频运行是我不同寻常的部分。我正在使用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行),它创建了一个文件。

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

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

会发生什么:

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

导出的jar文件: Jar工作,但mp3不播放。

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

  

错误消息:在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文件: Jar工作,但mp3不播放。

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

  

错误消息:javax.sound.sampled.UnsupportedAudioFileException:   无法从输入网址获取音频输入流           在javax.sound.sampled.AudioSystem.getAudioInputStream(未知来源)           在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(未知来源)           在audio.AudioPlayer.run(AudioPlayer.java:40)

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

相关主题:

File path or file location for Java - new file()

Reading File In JAR using Relative Path

Java Audio Stream (mp3spi lib), UnsupportedAudioFileException

Jar with compressed music with java?

1 个答案:

答案 0 :(得分:0)

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

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

Java Eclipse: Difference between exporting as a JAR and exporting as a Runnable JAR

该清单文件如何通过

影响正确的资源加载
ClassLoader.getSystemResourceAsStream

超出了我,但显然确实如此。

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

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