我刚刚开始使用OpenAL。
我已经成功地将WAV文件装入其中,并成功地播放了它们。这很容易。
现在,我需要能够将音乐流式传输到OpenAL中,而不是将整个文件加载到其中。虽然这对于音效之类的东西很有好处,但对于音乐来说,这可能是非常危险的,你可能知道。
问题是,我似乎在谷歌上找不到任何与此相关的东西。虽然我已经找到了一些与流媒体OGG文件相关的示例,但我更希望创建一个支持所有音乐文件的系统。
据我所知,OpenAL应该为此内置函数。但是我找不到他们。
所以,我的问题是,我如何将音频流到OpenAL的缓冲区中,同时删除已经播放的部分并导入尚未播放的部分?
如果这是一个无知的问题,我道歉。
使用alSourceQueueBuffers()
将缓冲区排队,以便由源直接连续播放。在回放过程中,将alGetSourcei()
与AL_BUFFERS_PROCESSED
结合使用,以获得已完全播放并准备重用的缓冲区的数量。alSourceUnqueueBuffers()
将为您从队列中弹出这些缓冲区,因此您可以用新数据填充它们并再次将它们排队。
基本上你将在一个线程中循环:睡眠一小段时间,测试新的可用缓冲区,用数据填充它们,将它们排队,然后再次进入睡眠。
SFML在它的SoundStream类(c++)中实现了这个,如果你喜欢的话,你可以把它看作一个参考。