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

Javascript 网络音频-如何立即更改所有声音的播放速率?,javascript,web-audio-api,playback-rate,Javascript,Web Audio Api,Playback Rate,使用Web音频时,您可以将您创建的所有声音连接到一个全局创建的gainNode,并使用该节点具有“主音量”属性。当您希望能够动态更改主音量并希望它立即影响所有声音时,这非常方便 现在,我正试图实现同样的目标,但是对于playbackRate。供参考:这将是一个网络游戏,你可以使用一个电源,以减缓时间,这也应该减缓所有的音乐和声音 我创建的每个声音都是一个链接到处理节点链的AudioBufferSourceNode。现在我知道,AudioBufferSourceNode本身有一个可以更改的play

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

现在,我正试图实现同样的目标,但是对于
playbackRate
。供参考:这将是一个网络游戏,你可以使用一个电源,以减缓时间,这也应该减缓所有的音乐和声音

我创建的每个声音都是一个链接到处理节点链的
AudioBufferSourceNode
。现在我知道,
AudioBufferSourceNode
本身有一个可以更改的
playbackRate
属性。这很好,但如果我想动态更改“全局播放速率”,则需要缓存我创建的所有
AudioBufferSourceNodes
,循环它们并更改它们的
playbackRate
。如果我可以用与全局
gainNode
相同的方法来完成这一点,那就太完美了,但我找不到一种方法来实现这一点

实现这种特性的正确方法是什么?您是否建议缓存所有创建的
AudioBufferSourceNodes
(可以是数千个)并在其上循环?这就是我使用HTML5音频的方式,但是对于更高级的Web音频来说,它似乎有点骇客


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

你不能直接这么做。有些源节点没有播放速率控制,比如实时输入。在这种情况下,你最好按照你的建议去做——保留一个活动声音列表,以便循环播放

您可以使用一种粒度方法来重新采样和俯仰-就像我的音频输入效果演示()中的“俯仰”代码一样。不过,如果你想产生效果,那就需要花费一些钱