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

时间:2012-12-10 02:44:05

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

我正在寻找一种模仿标准DJ混音器的3频段均衡器。

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

我到目前为止唯一的成功只是控制音轨音量的gainNode。

非常感谢任何协助。

谢谢, 斯坦

1 个答案:

答案 0 :(得分:6)

我会继续详细说明我对idbehold问题的回答:

我想说你可能想要使用类型为5(峰值)的滤波器,它允许所有频率通过,并且只在您设置相应filter.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;