网络音频 - 如何立即更改所有声音的回放率?

时间:2014-09-18 09:11:36

标签: javascript web-audio playback-rate

使用Web Audio时,您可以将创建的所有声音连接到全局创建的gainNode,并使用该节点获得“Master Volume”属性。当您希望能够动态更改主音量并希望它立即影响所有声音时,这非常方便。

现在,我正在努力实现同样的目标,但对于playbackRate。供参考:这将是一个网页游戏,您可以使用加电来减慢时间,这也应该减慢所有音乐和声音。

我创建的每个声音都是一个AudioBufferSourceNode链接到一系列处理节点。现在我知道AudioBufferSourceNode本身有一个playbackRate属性,你可以改变。这很棒,但是如果我想动态更改“global playbackRate”,它需要我缓存我创建的所有AudioBufferSourceNodes,循环它们并更改它们的playbackRate。如果我能以与全局gainNode相同的方式完成此任务,那将是完美的,但无法找到方法。

实现此类功能的正确方法是什么?你会建议缓存所有AudioBufferSourceNodes创建的(可以是数千个)并循环它们吗?这就是我使用HTML5音频的方式,但对于更先进的Web音频来说,这似乎很糟糕。

如果您想了解更多信息,请询问,我会更新问题!

1 个答案:

答案 0 :(得分:1)

你不能直接这样做。有些源节点没有播放速率控制 - 比如实时输入。在这种情况下,你最好做你的建议 - 保持一个活跃的声音列表循环。

可以使用粒度方法对其进行重新采样并将其向下弯曲 - 例如"俯仰弯曲"我的音频输入效果演示中的代码(https://webaudiodemos.appspot.com/input/)。尽管如此,为了防止这种情况发生,保持这种情况仍然有点代价。