10

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

这里明显的选择是使用 MP3 或 Ogg Vorbis。但我在这方面的成功有限——我可以使用 JLayer 播放 MP3(但它在同一个线程中播放)。至于Ogg,我一点运气都没有。更糟糕的是,JLayer 的法律地位有点可疑。

所以我的问题是针对 Java 开发人员和通常对声音有一定了解的人:我该怎么办?我能以某种方式从我的 WAV 中“减少脂肪”吗?有没有办法在 Java 中玩 Ogg?我应该使用其他声音格式吗?

4

4 回答 4

4

您可以使用JOrbis库来播放 OGG 音乐。对于工作示例用法,您可以在此处查看这些文件。

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

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

于 2009-06-12T12:59:35.447 回答
2

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

于 2008-10-28T19:51:31.543 回答
2

您描述的问题由 Java 中声音的服务提供者接口 (SPI) 解决。结果是,只需将 JAR 文件添加到您的类路径中,就会为默认的 Java Sound API 添加功能。从而能够在不更改代码的情况下处理更多声音格式。

上次我尝试这个时,Javazoom的人提供了一个可以工作的 MP3 SPI JAR。这是基于你提到的JLayer。

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

于 2008-10-28T19:57:11.140 回答
2

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

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

希望这可以帮助。

于 2008-10-28T20:11:10.083 回答