【问题标题】:Web Audio API - Removing filter while playingWeb Audio API - 播放时删除过滤器
【发布时间】:2017-11-19 17:36:45
【问题描述】:

是否可以在不中断播放的情况下删除过滤器节点? 据我了解,必须重建节点图以“关闭某些东西”?

我的图表如下所示:

Source-->GainNode-->LowpassFilter-->HighshelfFilter-->Destination

所以我想打开/关闭 HighshelfFilter,但如果不停止播放音频,它似乎不起作用。

我也尝试设置filter.type = 'allpass';,但这会导致一些奇怪的音效。

【问题讨论】:

    标签: javascript html5-audio web-audio-api


    【解决方案1】:

    最好的方法是设置并行连接,一个带过滤,一个直接,然后在它们之间交叉淡入淡出(即每个都有一个增益节点,一个增益节点设置为 0.0,一个设置为 1.0 )。路由看起来像这样:

    Source-->GainNode1-->LowpassFilter-->HighshelfFilter-->Destination
          ↳->GainNode2-----------------------------------↗︎
    

    首先将增益节点之一设置为 0.0,将一个增益节点设置为 1.0,然后像这样在它们之间切换:

    // activate the filters - using setTarget to do a fast crossfade will avoid clicks
    gainNode1.gain.setTargetAtTime(1.0, audioCtx.currentTime + 1, 0.001);
    // deactivate the direct line
    gainNode2.gain.setTargetAtTime(0.0, audioCtx.currentTime + 1, 0.001);
    

    您可以按照您的建议对过滤器本身进行更改,使其不会产生任何重大影响。不是全通,而是尝试使用 .gain 为 0.0 的“峰值”型滤波器?不过,我不知道这将如何影响所有相位关系(这就是全通听起来很奇怪的原因)。

    最后,一种不推荐的方法 - 您可以断开并重新连接节点。如果有活动音频,这将导致点击或弹出。 (这就是上面提到的示例所做的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多