代码之家  ›  专栏  ›  技术社区  ›  Dysprosium

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

  •  2
  • Dysprosium  · 技术社区  · 10 年前

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

    现在,我正在努力实现同样的目标,但为了 playbackRate 。仅供参考:这将适用于网络游戏,您可以使用电源来降低时间,这也会降低所有音乐和声音的速度。

    我创造的每个声音都是 AudioBufferSourceNode 链接到处理节点链。现在我知道 音频缓冲源节点 它本身有一个 回放速率 您可以更改的属性。这很好,但这需要我缓存所有 AudioBufferSourceNodes 我创建、循环它们并更改它们 回放速率 如果我想随时更改“全局播放率”。如果我能以与全球公司相同的方式完成这项工作,那将是完美的 增益节点 ,但找不到这样做的方法。

    实现这种功能的正确方法是什么?您是否建议缓存所有 音频缓冲源节点 创建(可以是数千个)并在其上循环?这是我用HTML5音频实现的方式,但对于更高级的Web音频来说,这似乎很难。

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   cwilso    10 年前

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

    能够 使用细粒度方法重新采样并向下倾斜-就像我的音频输入效果演示中的“倾斜弯曲”代码( https://webaudiodemos.appspot.com/input/ ). 不过,为了防止你想产生效果,这是一个有点昂贵的东西。