所以,我有我想變成一個可執行的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)加載流和由組塊播放塊。 –