使用Web Audio时,您可以将创建的所有声音连接到全局创建的gainNode
,并使用该节点获得“Master Volume”属性。当您希望能够动态更改主音量并希望它立即影响所有声音时,这非常方便。
现在,我正在努力实现同样的目标,但对于playbackRate
。供参考:这将是一个网页游戏,您可以使用加电来减慢时间,这也应该减慢所有音乐和声音。
我创建的每个声音都是一个AudioBufferSourceNode
链接到一系列处理节点。现在我知道AudioBufferSourceNode
本身有一个playbackRate
属性,你可以改变。这很棒,但是如果我想动态更改“global playbackRate”,它需要我缓存我创建的所有AudioBufferSourceNodes
,循环它们并更改它们的playbackRate
。如果我能以与全局gainNode
相同的方式完成此任务,那将是完美的,但无法找到方法。
实现此类功能的正确方法是什么?你会建议缓存所有AudioBufferSourceNodes
创建的(可以是数千个)并循环它们吗?这就是我使用HTML5音频的方式,但对于更先进的Web音频来说,这似乎很糟糕。
如果您想了解更多信息,请询问,我会更新问题!
答案 0 :(得分:1)
你不能直接这样做。有些源节点没有播放速率控制 - 比如实时输入。在这种情况下,你最好做你的建议 - 保持一个活跃的声音列表循环。
你可以使用粒度方法对其进行重新采样并将其向下弯曲 - 例如"俯仰弯曲"我的音频输入效果演示中的代码(https://webaudiodemos.appspot.com/input/)。尽管如此,为了防止这种情况发生,保持这种情况仍然有点代价。