java - 如何将音频流式传输到 OpenAL Sources?

标签 java audio stream lwjgl openal

我刚刚开始使用 OpenAL。

我已成功将 WAV 文件加载到其中,并成功播放了它们。这很容易。

现在,我需要能够将音乐流式传输到 OpenAL,而不是将整个文件加载到其中。虽然这对音效等有好处,但用在音乐上可能非常危险,您可能知道。

问题是,我似乎无法在 Google 上找到与此相关的任何内容。虽然我找到了一些与流式传输 OGG 文件相关的示例,但我更愿意制作一个支持所有音乐文件的系统。

据我了解,OpenAL 应该为此内置了函数。但是我找不到它们。

所以,我的问题是,如何将音频流式传输到 OpenAL 的缓冲区,同时删除已播放的部分并导入尚未播放的部分?

如果这是一个无知的问题,我深表歉意。

最佳答案

使用 alSourceQueueBuffers() 将缓冲区排队以直接连续播放。在播放期间,将 alGetSourcei()AL_BUFFERS_PROCESSED 结合使用,以获取已完全播放并准备好重新使用的缓冲区数。 alSourceUnqueueBuffers() 将为您从队列中弹出这些缓冲区,这样您就可以用新数据填充它们并再次将它们排队。

基本上你会在一个线程中循环: hibernate 一小段时间,测试新的可用缓冲区,用数据填充它们,排队然后再次 hibernate 。

SFML 在其 SoundStream class 中实现了这一点(C++),喜欢的可以引用一下。

关于java - 如何将音频流式传输到 OpenAL Sources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16181264/

相关文章:

node.js - fs.createReadStream(path[, options]) - 这些选项是什么?

bash - 使用 mkfifo 和传输流,这可能吗?

android - 在android中实现高通音频滤波器

html - 带有鼠标悬停的多 channel 音频HTML5

java - 在java中绘制wav文件

Python:如何从 gzip 压缩中流式传输/管道传输数据?

java - 应用程序每次收到推送通知都会崩溃

java - 我的 DFS 图形方法不会从 int 变为 String

java - 有没有一种简单的方法可以强制 String.split() 返回具有空字符串元素的数组?

java - 能否对 Java 程序进行分析以将其剥离为基本包以及 JRE?