我刚刚开始使用 OpenAL。
我已成功将 WAV 文件加载到其中,并成功播放它们。这很容易。
现在,我需要能够将音乐流式传输到 OpenAL 中,而不是将整个文件加载到其中。虽然这对于声音效果等有好处,但正如您可能知道的那样,对于音乐来说可能非常危险。
问题是,我似乎无法在谷歌上找到与此相关的任何内容。虽然我找到了一些与流 OGG 文件相关的示例,但我更愿意制作一个支持所有音乐文件的系统。
据我了解,OpenAL 应该为此内置函数。但我找不到他们。
所以,我的问题是,如何将音频流式传输到 OpenAL 的缓冲区中,同时删除已播放的部分并导入尚未播放的部分?
如果这是一个无知的问题,我深表歉意。
Use alSourceQueueBuffers()
对要由源直接连续播放的缓冲区进行排队。在播放过程中,使用alGetSourcei()
和这个结合AL_BUFFERS_PROCESSED
获取已完全播放并准备重用的缓冲区数量。alSourceUnqueueBuffers()
将为您将这些缓冲区从队列中弹出,以便您可以用新数据填充它们并再次将它们排队。
基本上,您将在一个线程中循环:休眠一小段时间,测试新的可用缓冲区,用数据填充它们,将它们排队并再次休眠。
SFML 在其中实现了这一点声音流类 https://github.com/LaurentGomila/SFML/blob/master/src/SFML/Audio/SoundStream.cpp(C++),喜欢的可以看一下作为参考。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)