2008-10-28 152 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编辑器来降低比特率,切换到单声道或两者。这将节省大量的空间,并且在玩游戏时你不会注意到质量的差异。

希望这会有所帮助。