gpt4 book ai didi

c++ - 如何在另一个声音结束后立即播放一个声音?

转载 作者:太空狗 更新时间:2023-10-29 21:50:35 26 4
gpt4 key购买 nike

我无法通过检查声音是否已在我的程序中停止来确保这一点,因为声音是在不同的线程中处理的,对吗?

所以当我想 100% 确定一旦一个声音停止播放,另一个声音将在它之后立即开始播放时,没有任何延迟的可能性,问题就来了。

第二个声音将是循环声音类型,所以我不能将这两个声音粘在一起。

我该怎么做?

最佳答案

我不知道 OpenAL 中有任何函数可以让你直接做这样的事情,例如通过阻止或通知您,可以按照您所说的方式进行无缝播放。任何像“在第一个声音的持续时间内 sleep ,然后开始第二个声音”这样的解决方案都注定会失败,因为 sleep 是不可靠的。反复检查源是否已停止播放也不起作用,因为当您看到源已完成播放时,已经有一个可听见的间隙。

但是,您可以通过对第一个声音使用一次 alSourceQueueBuffers 和对第二个(循环)声音使用一次来间接实现此功能。

开始播放源。

然后定期调用 alGetSourcei(source, AL_BUFFERS_PROCESSED, &num_done)。您不需要一直调用它,只需比循环声音的持续时间更频繁即可。

如果这告诉您缓冲区已完成,请取消排队。这是完成的第一个声音,现在正在播放第二个。现在,再次快速将包含第二个声音的缓冲区放入队列,并在您希望声音循环播放时一直保持队列/取消队列。

关于c++ - 如何在另一个声音结束后立即播放一个声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com