使用Web Audio API实现3波段均衡器



我想实现一个模仿标准DJ混音器的3频段均衡器。

不幸的是,我运气不太好。我知道这涉及到创建BiquadFilter节点并将它们连接到增益节点。不幸的是,我没有达到预期的结果。

到目前为止,我唯一的成功就是gainNode控制了曲目的音量。

如有任何协助,我们将不胜感激。

谢谢,Stan

我将继续详细阐述我对idseew问题的回答:

我想说,你可能想使用类型5(峰值)的滤波器,它可以让所有频率通过,并且只在你设置相应滤波器的频率上放大/降低。frequency.value。这可以让你串联滤波器,这样你就不需要单独的音频路径。您也可以考虑使用低层滤波器作为第一个滤波器,使用高层滤波器作为第三个滤波器,这在3波段均衡器中相当常见。

如果你使用串联的峰值滤波器,你不需要每个频率都有一个单独的增益节点,你只需要为特定的滤波器设置filter.gain.value。

代码看起来像这样:

var lowshelf = context.createBiquadFilter(),
mid = context.createBiquadFilter(),
highshelf = context.createBiquadFilter();
//set the filter types (you could set all to 5, for a different result, feel free to experiment)
lowshelf.type = 3;
mid.type = 5;
highshelf.type = 4;
//connect 'em in order
yourInput.connect(lowshelf);
lowshelf.connect(mid);
mid.connect(highshelf);
highshelf.connect(yourOutput);

然后,您可以使用各自的Q、频率和增益值调整每个频带(检查https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#BiquadFilterNode查看哪些参数适用于哪种过滤器类型),例如:

lowshelf.gain.value = 0.6;
lowshelf.frequency.value = 300;

编辑

要添加单独的增益,只需执行

var gainNode = context.createGainNode();

然后要么做

gainNode.connect(lowshelf); //pre EQ

highshelf.connect(gainNode); //post EQ

取决于你是想在EQ后还是前。你可以通过来控制增益

gainNode.gain.value = 0.6;

最新更新