对于我正在制作的电脑游戏,我显然想播放声音。到目前为止,我一直在使用AudioClip来播放WAV文件。虽然这种方法工作正常,但WAV文件往往是巨大的。几秒钟的声音最终达到数百kB。我面临的游戏下载是95%的音频!
这里显而易见的选择是使用MP3或Ogg Vorbis。但是我在这方面取得了有限的成功 - 我可以使用JLayer播放MP3(但它在同一个帖子中播放)。至于奥格,我根本就没有运气。更糟糕的是,JLayer的法律地位有点可疑。
所以我的问题是Java开发人员和普遍了解声音的人:我该怎么办?我可以以某种方式从我的WAV中“削减脂肪”吗?有没有办法在Java中玩Ogg?我应该使用其他一些声音格式吗?
答案 0 :(得分:4)
您可以使用JOrbis库来播放OGG音乐。对于工作样本用法,您可以查看这些文件here。
我还尝试了一些无损音频压缩,例如我有一个16位单声道声音。我将每个样本的高字节和低字节分开,然后将它们放在一起。然后我应用了差分替换,其中每个字节被替换为与最后一个字节的差异。最后使用GZIP压缩数据。我能够将数据大小减小到原始大小的50-60%。不幸的是,这还不够,所以我转向OGG格式。
我注意到8位音乐的一件事是,如果我改变音量,播放会变得非常嘈杂。我通过在SourceDataLine.write()之前将音频数据上采样到16位来解决这个问题。
答案 1 :(得分:2)
这些可能已经过时,但Xiph.org团队(维护Ogg和Vorbis等)正式认可。 http://www.vorbis.com/software/#java
答案 2 :(得分:2)
您描述的问题由Java的声音服务提供程序接口(SPI)解决。结果是,只需将JAR文件添加到类路径中,就会向默认的Java Sound API添加功能。因此,无需更改代码即可处理更多声音格式。
上次我试过这个时,Javazoom人提供了一个有效的MP3 SPI JAR。这是基于你提到的JLayer。
对于Vorbis OGG,现在似乎也有一个SPI库。查看Javazoom上Vorbis SPI上的文档。
答案 3 :(得分:2)
如果您决定继续使用wav格式...
拥有高质量的声音文件可能并不是很重要。您可以使用自己喜欢的wav编辑器来降低比特率,切换到单声道,或两者兼而有之。这将节省大量的空间,你不会注意到玩游戏时的质量差异。
希望这有帮助。