gpt4 book ai didi

javascript - Web Audio API - 播放时删除过滤器

转载 作者:行者123 更新时间:2023-11-28 03:58:20 26 4
gpt4 key购买 nike

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

我的图表如下所示:

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

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

我还尝试设置 filter.type = 'allpass'; 但这会导致一些奇怪的声学效果。

最佳答案

执行此操作的最佳方法是设置并行连接,一个带过滤,一个直接,然后在它们之间交叉淡入淡出(即每个增益节点都有一个增益节点,其中一个增益节点设置为 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 的“峰值”型滤波器来代替全通吗?不过,我并不确切知道这将如何影响所有相位关系(这就是为什么全通听起来很奇怪)。

最后,一种不推荐的方法 - 您可以断开并重新连接节点。如果有事件音频,这将导致咔嗒声或爆裂声。 (这就是上面提到的示例的作用。)

关于javascript - Web Audio API - 播放时删除过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com