java - 一旦以jar/zip格式导出,AudioInputStream无法正常工作

标签 java maven audio export mp3

所以我想通过mp3spi库播放声音(mp3文件)。我应该补充一点,这个项目是要在另一个程序(如附加程序)中运行的,因此它本身除了调试类外没有任何主类。当我从该调试类运行项目时,一切工作正常,但是从主程序内部运行它时(我应该补充一点,将附件导出为jar和zip文件,然后将zip文件加载到主程序)我得到一个javax.sound.sampled.UnsupportedAudioFileException。我认为问题与附件未正确连接到库有关,但所有mp3spi jar都包含在lib文件夹中。

我们正在使用maven来构建所有附加组件和主程序,因此我也尝试将类路径添加到 list 文件中。 (在maven-jar-plugin中,就像许多其他堆栈溢出文章中所建议的那样),它似乎可以为其他人工作,但不适用于我。其他人也建议使jar可运行,因此我将调试类添加为主类,然后再次尝试,该方法也不起作用。

无论如何,我已经迷失了方向,无法尝试。任何帮助将非常感激!

这是再次导致错误的代码:

 String path = soundFileMap.get(soundId);
    try {
        inputStream = AudioSystem.getAudioInputStream(new File(path));
    ... (rest not shown)

这是一个异常(exception):
javax.sound.sampled.UnsupportedAudioFileException: format not supported
    at javax.sound.sampled.AudioSystem.getAudioInputStreamImpl(AudioSystem.java:1023) ~[tritonus share-0.3.7-2.jar:?]
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1005) ~[tritonus-share-0.3.7-2.jar:?]
    at jundl77.izou.izousound.outputplugin.SoundEngine.playSoundFile(SoundEngine.java:298) [classes/:?]
    at jundl77.izou.izousound.outputplugin.SoundEngine.run(SoundEngine.java:382) [classes/:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_20]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_20]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_20]

这是我的maven-jar-plugin的样子:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifestEntries>
                <Plugin-Id>${plugin.id}</Plugin-Id>
                <Plugin-Class>${plugin.class}</Plugin-Class>
                <Plugin-Version>${plugin.version}</Plugin-Version>
                <Plugin-Provider>${plugin.provider}</Plugin-Provider>
                <Plugin-Dependencies>${plugin.dependencies}</Plugin-Dependencies>
            </manifestEntries>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addClasspath>true</addClasspath>
                <mainClass>jundl77.izou.izousound.Debug</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

无论如何,再次提供任何帮助将不胜感激。

最佳答案

最好直接从URL或File(而不是InputStream)创建AudioInputStream。鉴于资源打包在一个Jar中,因此您应该使用URL,因为不能从jar中读取文件。

关于java - 一旦以jar/zip格式导出,AudioInputStream无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885129/

相关文章:

maven - 如何在 eclipse 中使用已安装的 Maven 版本

java - 如何获取 Recyclerview 特定 Item 的 ViewHolder

java - 在 ubuntu 服务器上启动 spring boot jar 的问题。启动 ApplicationContext 时出错

java - Apache Tomcat 8.0 在 Eclipse MARS 上启动失败 - JAVA EE

java - Log4J 1.2 PropertyConfigurator -> Log4J2

java - 如何修复Flink管道NoClassDefFoundError : "org/apache/hadoop/conf/Configuration"

eclipse - SLF4J:无法加载类 "org.slf4j.impl.StaticLoggerBinder"。错误

java - 为什么无法重新打开 TargetDataLine?

android - Smule 唱歌音频效果如何工作?

python - SciPy wavfile : music in, 垃圾输出?