如何将音频流式传输到OpenAL源?

时间:2013-04-24 00:13:41

标签: java audio stream lwjgl openal

我刚刚开始使用OpenAL。

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

现在,我需要能够将音乐流式传输到OpenAL,而不是将整个文件加载到OpenAL中。虽然这对声音效果等有好处,但对音乐来说可能非常危险,正如您可能知道的那样。

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

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

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

如果这是一个无知的问题,我道歉。

1 个答案:

答案 0 :(得分:2)

使用alSourceQueueBuffers()对要由源直接连续播放的缓冲区进行排队。在播放过程中,将alGetSourcei()AL_BUFFERS_PROCESSED结合使用,以获得已完全播放并可以重复使用的缓冲区数量。 alSourceUnqueueBuffers()会将这些缓冲区从队列中弹出,这样您就可以用新数据填充它们并重新排队。

基本上你将在一个线程中循环:暂停一小段时间,测试新的可用缓冲区,填充数据,排队并再次进入睡眠状态。

SFML在其SoundStream class(C ++)中实现了这一点,如果愿意,可以将其作为参考。