对于我正在制作的电脑游戏,我显然想播放声音。到目前为止,我一直在使用AudioClip来播放WAV文件。虽然这种方法工作正常,但WAV文件往往是巨大的。几秒钟的声音最终达到数百kB。我面临的游戏下载是95%的音频!

这里显而易见的选择是使用MP3或Ogg Vorbis。但是我在这方面取得了有限的成功 - 我可以使用JLayer播放MP3(但它在同一个帖子中播放)。至于奥格,我根本就没有运气。更糟糕的是,JLayer的法律地位有点可疑。

所以我的问题是Java开发人员和普遍了解声音的人:我该怎么办?我能以某种方式“修剪脂肪”吗?关闭我的WAV?有没有办法在Java中玩Ogg?我应该使用其他一些声音格式吗?

有帮助吗?

解决方案

您可以使用 JOrbis 库来播放OGG音乐。对于工作样本用法,您可以查看这些文件这里

我还尝试了一些无损音频压缩,例如我有一个16位单声道声音。我将每个样本的高字节和低字节分开,然后将它们放在一起。然后我应用了差分替换,其中每个字节被替换为与最后一个字节的差异。最后使用GZIP压缩数据。我能够将数据大小减小到原始大小的50-60%。不幸的是,这还不够,所以我转向OGG格式。

我注意到8位音乐的一件事是,如果我改变音量,播放会变得非常嘈杂。我通过在SourceDataLine.write()之前将音频数据上采样到16位来解决这个问题。

其他提示

这些可能已经过时,但Xiph.org团队(维护Ogg和Vorbis等)正式认可。 http://www.vorbis.com/software/#java

您描述的问题由Java的声音服务提供程序接口(SPI)解决。结果是,只需将JAR文件添加到类路径中,就会为默认的Java Sound API添加功能。因此,无需更改代码即可处理更多声音格式。

上次我试过这个时, Javazoom 的人们提供了一个可用的MP3 SPI JAR。这是基于你提到的JLayer。

对于Vorbis OGG,现在似乎也有一个SPI库。查看Javazoom上 Vorbis SPI 上的文档。

如果您决定继续使用wav格式...

拥有高质量的声音文件可能并不是很重要。您可以使用自己喜欢的wav编辑器来降低比特率,切换到单声道,或两者兼而有之。这将节省大量的空间,你不会注意到玩游戏时的质量差异。

希望这有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top