【发布时间】:2020-08-08 08:15:43
【问题描述】:
我正在使用 LWJGL 3 制作游戏,并且第一次了解 OpenAL 库。我将不得不包含长音频文件,并且我决定将 OGG 用于音频,因为否则音乐会占用大量空间。
不过,我不知道如何从 OGG 中获取音频数据并将它们放入 OpenAL 缓冲区,这需要 ShortBuffer 的签名短 PCM 样本。
我一直在努力寻找答案,但我发现的一切似乎都已过时或与我的情况无关。
总结一下:我有 OGG 文件,我需要能够将它们加载到 OpenAL 缓冲区。此外,从文件流式传输的能力显然是必须的(在这种情况下,将文件一次一个块读取到双缓冲区中),因为涉及到音乐。
例子:
ShortBuffer samples = readOggSamplesToBuffer(someInputStream);
int bufferId = AL10.alGenBuffers();
// OpenAL wants the samples as signed short
AL10.alBufferData(bufferId, AL10.AL_FORMAT_MONO16, samples, 44100);
函数readOggSamplesToBuffer 是这样的:
private ShortBuffer readOggSamplesToBuffer(InputStream in) {
// This theoretical class is what I need – something that
// can read the data from the OGG file.
OggReader reader = new OggReader(in);
// Very simplified example
ShortBuffer buffer = BufferUtils.createShortBuffer(reader.getSampleCount());
buffer.put(reader.samplesAsShortArray());
return buffer;
}
【问题讨论】:
-
嗨 Zakru,您能否更明确地说明您遇到的问题。这个问题似乎太开放了,可能会被关闭。您拥有的任何代码都会在这里有所帮助。
-
@RossCradock 添加了使用示例
标签: java audio lwjgl openal ogg