2008-10-28 146 views
10

對於我正在製作的電腦遊戲,我顯然希望播放聲音。到目前爲止,我一直在使用AudioClip播放WAV文件。雖然這種方法工作正常,但WAV文件往往是巨大的。幾秒鐘的聲音最終達到數百kB。我面臨着一個95%的音頻下載遊戲!在Java遊戲中播放小聲音

這裏明顯的選擇是使用MP3或Ogg Vorbis。但是我的成功有限 - 我可以使用JLayer播放MP3(但它在同一個線程中播放)。至於奧格,我一直沒有運氣。更糟的是,JLayer的法律地位有點可疑。

所以我的問題是對Java開發人員以及一般對聲音有所瞭解的人:我該怎麼做?我可以以某種方式「修剪掉」我的WAV上的脂肪?在Java中玩Ogg有什麼方法嗎?有沒有其他的聲音格式我應該使用?

回答

4

您可以使用JOrbis庫來播放OGG音樂。對於工作示例使用情況,您可以查看這些文件here

我也嘗試過一些無損音頻壓縮,例如我有一個16位單聲道的聲音。我分離了每個樣本的高位和低位字節,並將它們放在一起。然後我應用了差分替換,其中每個字節被與最後一個字節的差異替代。最後用GZIP壓縮數據。我能夠將數據大小縮小到原始大小的50-60%。不幸的是,這還不夠,所以我轉向了OGG格式。

我注意到8位音樂的一件事是,如果我改變音量,播放變得非常嘈雜。我通過在SourceDataLine.write()之前將音頻數據上採樣到16位來解決了這個問題。

+0

太棒了!我以前看過JOrbis,但它看起來完全缺乏文檔,使我無法弄清楚如何將它指向.ogg文件,並使聲音從揚聲器中傳出。 – Zarkonnen 2009-06-12 13:28:24

2

您描述的問題由服務提供程序接口(SPI)針對Java中的聲音解決。其結果是隻需將JAR文件添加到類路徑中即可將功能添加到默認的Java Sound API。從而能夠在不改變代碼的情況下處理更多聲音格式。

我上次試過這個Javazoom的人提供了一個可用的MP3 SPI JAR。這是基於你提到的JLayer。

對於Vorbis OGG,現在似乎還有一個SPI庫。查看Javazoom上Vorbis SPI的文檔。

2

如果你決定留下來與WAV格式...

它可能不是很重要的是要有高品質的聲音文件。您可以使用您最喜歡的wav編輯器來降低比特率,切換到單聲道或兩者。這將節省大量的空間,並且在玩遊戲時你不會注意到質量的差異。

希望這會有所幫助。