java - 使用 mp3spi 在 jar 中播放 MP3

标签 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 行),它需要创建一个 File。

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

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

会发生什么:

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

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

使用 Windows 控制台打开的导出 jar 文件:
Jar 工作,但 mp3 不播放。

Error messages: 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 文件:
Jar 工作,但 mp3 不播放。

使用 Windows 控制台打开的导出 jar 文件:
Jar 工作,但 mp3 不播放。

Error messages: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input URL at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source) at audio.AudioPlayer.run(AudioPlayer.java:40)



我无法从 URL 获取 AudioInputStream?我不知道。所以让我们开始...

第三次和第四次尝试

尝试 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 文件:
Jar 工作,但 mp3 不播放。

Error messages: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source) at 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?

最佳答案

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

现在,我尝试将我的项目导出为可运行的 jar,它工作得很好(尝试 4,也许还有其他尝试)。下面的问答解释了jar和runnable jar的区别。

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

该 list 文件如何影响资源的正确加载

ClassLoader.getSystemResourceAsStream

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

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

因为我有一个可行的解决方案,所以我现在已经完成了这个主题。

关于java - 使用 mp3spi 在 jar 中播放 MP3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423208/

相关文章:

iphone - AVAudio 检测音符/音调/等。 iPhone xcode objective-c

internet-explorer - 当我在文本字段中按Enter键时,需要停止什么事件才能阻止 “Dinging”中的IE?

java - 每个类在jar文件中都有两个类文件

java - JNA/DLL 调用后 System.out.println() 停止工作?

java - 我可以配置 Hibernate/JPA 在仅修改非时间戳字段时更新实体记录吗?

java - SocketChannel.close() 是否也关闭套接字?

java - 随机生成的 X 数

audio - MP3数据帧使用什么整数类型?

java - 从不同的 jar 构建可执行文件

ant - 如何为项目/lib 中的本地 jar 创建 Ivy 依赖项?