2

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

现在,我正在尝试完成同样的任务,但是对于playbackRate. 供参考:这适用于网页游戏,您可以在其中使用加电来减慢时间,这也应该减慢所有音乐和声音。

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

实现这种功能的正确方法是什么?你会推荐缓存所有AudioBufferSourceNodes创建的(可能是数千个)并循环它们吗?这就是我对 HTML5 音频执行此操作的方式,但对于更高级的 Web 音频来说,这似乎很麻烦。

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

4

1 回答 1

1

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

可以使用精细的方法对其进行重新采样和弯音 - 就像我的音频输入效果演示 ( https://webaudiodemos.appspot.com/input/ ) 中的“弯音”代码。但是,以防万一您想产生效果,保留它的成本有点高。

于 2014-09-18T10:00:45.763 回答