使用Web音频时,可以将创建的所有声音连接到一个全局创建的gainNode,并使用该节点具有“主音量”属性。当您希望能够即时更改主音量并希望其立即影响所有声音时,这非常方便。

现在,我尝试实现相同的功能,但要使用playbackRate。供参考:这是针对网页游戏的,您可以使用开机来减慢时间,这也应该减慢所有音乐和声音的速度。

我创建的每个声音都是链接到一系列处理节点的AudioBufferSourceNode。现在,我知道AudioBufferSourceNode本身具有一个可以更改的playbackRate属性。这很棒,但是如果我想即时更改“全局播放率”,则需要我缓存创建的所有AudioBufferSourceNodes,在它们上循环并更改它们的playbackRate。如果能以与全局gainNode相同的方式来完成此操作,但找不到解决方法,那将是完美的。

实现这种功能的正确方法是什么?您是否建议缓存所有创建的AudioBufferSourceNodes(可以是数千个)并循环遍历它们?这就是我使用HTML5音频执行此操作的方式,但是对于Web音频来说似乎很不客气,它要先进得多。

如果您需要更多信息,请询问,我将更新问题!

最佳答案

您不能直接这样做。有些源节点没有回放速率控制,例如实时输入。在这种情况下,您最好按照建议进行操作-保留要循环播放的活动声音列表。

您可以使用粒度方法对其进行重新采样和弯音-就像我的音频输入效果演示(https://webaudiodemos.appspot.com/input/)中的“弯音”代码一样。不过,保持这种状态有点昂贵,以防万一您想要产生效果。

09-20 21:05