是否可以在不中断播放的情况下删除过滤节点? 据我所知,必须重建节点图以“关闭某些东西”?
我的图表如下所示:
Source-->GainNode-->LowpassFilter-->HighshelfFilter-->Destination
所以我想打开/关闭HighshelfFilter,但是如果不停止播放音频,它似乎无法正常工作。
我也尝试设置filter.type = 'allpass';
,但这会导致一些奇怪的声学效果。
答案 0 :(得分:0)
执行此操作的最佳方法是设置并行连接,一个使用过滤,一个直接连接,然后在它们之间交叉淡入淡出(即每个都有一个增益节点,其中一个增益节点设置为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的高峰"类型过滤器?我不确切地知道这将如何影响所有相位关系(这就是为什么allpass听起来很奇怪)。
最后,一种不推荐的方法 - 您可以断开连接并重新连接节点。如果有活动音频,这将导致咔嗒声或砰砰声。 (这就是上面提到的样本。)