2013-04-24 70 views
1

我刚刚开始使用OpenAL。如何将音频流入OpenAL源?

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

现在,我需要能够将音乐流入OpenAL,而不是将整个文件加载到OpenAL中。虽然这对音效和类似效果很好,但如您所知,使用音乐可能会非常危险。

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

据我所知,OpenAL应该已经内置了这个功能。但我找不到它们。

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

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

回答

1

使用alSourceQueueBuffers()排列缓冲区,以便由源直接连续播放。在播放过程中,使用alGetSourcei()AL_BUFFERS_PROCESSED一起获得已完全播放并准备重新使用的缓冲区数。 alSourceUnqueueBuffers()会将这些缓冲区从队列中弹出,以便您可以用新数据填充它们并将它们重新排队。

基本上你会循环一个线程:短时间睡眠,测试新的可用缓冲区,填充数据,排队并重新进入睡眠状态。

SFML在其SoundStream class(C++)中实现此功能,如果您愿意,可以将其视为参考。