我试图在我的JAR文件中加载WAV资源文件。通过IDE运行时,它完美地工作。但是当通过java -jar
运行时,它给我提供了大约75%的垃圾和25%的正确数据。我想知道为什么。这里有一些方法我试过:在JAR内部访问Java资源会返回大约75%的垃圾
(我的首选方法):阅读与的getResourceAsStream从JAR给出了具有原始的某些部分损坏的数据:
short[] waveform = AudioFileAPI.readWavFile( Blah.class.getResourceAsStream("/blah.wav"));
从常规文件读取:从创建的JAR OK
waveform = AudioFileAPI.readWavFile(new File("C:\\blah\\blah.wav"));
提取WAV和阅读它作为一个普通的文件:OK
waveform = AudioFileAPI.readWavFile(new File("C:\\blah\\fromjar.wav"));
使用getResource读取并调用AppletAudioClip上的play()会导致75%的数据损坏,如上所述。
Object o = Blah.class.getResource("/blah.wav").getContent(); AppletAudioClip appletAudioClip = (AppletAudioClip) o; appletAudioClip.play();
通过getResource()读取openStream():如上所述75%损坏的数据。
InputStream is = Blah.class.getResource("/blah.wav").openStream(); waveform = AudioFileAPI.readWavFile(is);
解压缩并重新压缩JAR并重新运行该程序也没有帮助。
回顾一下,上述所有方法在从IDE运行时都能很好地工作,但是在作为资源加载时指示的方法失败。 JAR由IntelliJ IDEA打包。我使用JDK版本1.8.0_131。 AudioFileAPI是我自己的课程。
可能是因为从'getResource(..)'返回的流不可定位。为什么不使用来自Java声音API的'Clip'呢? –
我实际上并不打算播放音频,但我需要对音频样本进行一些信号处理。我需要资源中的二进制数据,而不是仅支持播放功能的对象。 – 3VYZkz7t