所以,我有我想变成一个可执行的JAR的Java应用程序。我在这个应用程序中使用JMF,我似乎无法得到的声音文件工作的权利......如何从classpath中加载的媒体资源JMF
我创建使用
jar cvfm jarname.jar manifest.txt *.class *.gif *.wav
所以罐子,所有的声音文件被放在里面的罐子,并在代码中,我使用
Player player = Manager.createPlayer(ClassName.class.getResource("song1.wav"));
罐子是我的桌面上,当我尝试运行它,会出现此异常创建玩家:
javax.media.NoPlayerException: Cannot find a Player for :jar:file:/C:/Users/Pojo/
Desktop/jarname.jar!/song1.wav
...它没有得到的IOExceptions,所以它似乎至少可以找到文件本身没事。
另外,我用的getResource之前,我曾经有过这样的:
Player player = Manager.createPlayer(new File("song1.wav").toURL());
和它打很好,所以我知道什么是错的声音文件本身。
我想切换到这个方法,而不是文件的方法的原因是,这样的声音文件可以被打包的jar本身内部,并没有成为它的一个目录中的兄弟姐妹。
为什么使用JMF进行声音? 'javax.sound。采样的API自1.3以来一直是J2SE的一部分。 –
@Andrew汤普森 上有什么'javax.sound.sampled'其他操作除了剪辑?因为我使用剪辑尝试,它只是因为他们太大,剪辑拒绝玩什么比1MB左右 – Pojo
大不会为这些文件的工作*“剪辑拒绝玩什么大于1MB左右” * a)您可能应该将这些转换为MP3格式,所以它们(通常)会比WAV更小。 B)如果你这样做,那么需要JMF的'mp3plugin.jar'来解码MP3,而不是整个JMF。 C)Oracle的'Clip'实现最多可以处理44.1 KHz 16位立体声的1秒,但是还有其他两种处理大型音频的方法。 1)[BigClip](http://stackoverflow.com/questions/5667454/playing-audio-file-in-java-application/5668510#5668510)2)加载流和由组块播放块。 –