javascript - Web Audio - 如何立即更改所有声音的播放速率?

标签 javascript web-audio-api playback-rate

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

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

我创建的每个声音都是一个链接到一系列处理节点的 AudioBufferSourceNode。现在我知道 AudioBufferSourceNode 本身有一个可以更改的 playbackRate 属性。这很好,但是如果我想更改飞。如果我能以与全局 gainNode 相同的方式完成此操作,那将是完美的,但找不到实现该操作的方法。

实现此类功能的正确方法是什么?您会建议缓存所有创建的AudioBufferSourceNodes(可以是数千个)并循环遍历它们吗?这就是我对 HTML5 音频执行此操作的方式,但对于更高级的网络音频来说似乎很老套。

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

最佳答案

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

可以使用粒度方法对其进行重新采样和弯音 - 就像我的音频输入效果演示 (https://webaudiodemos.appspot.com/input/) 中的“弯音”代码一样。不过,为了以防万一您想要产生这种效果,随身携带它的成本有点高。

关于javascript - Web Audio - 如何立即更改所有声音的播放速率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25908628/

相关文章:

javascript - 如何获取增益节点

javascript - 计算 AnalyserNode 的 smoothingTimeConstant

javascript - WebAudio setTargetAtTime : formula to convert-time constant to seconds

python - QMediaPlayer setPlaybackRate > 1 会导致高音调音频

javascript - 替换表的元素值

javascript - slickgrid - 选择数据时自动滚动视口(viewport)

方法中的 JavaScript 变量修改对象的属性?

javascript - 在 .map() 中使用 fse.readFile()