【问题标题】:Implementing a 3 Band Equalizer using Web Audio API使用 Web Audio API 实现 3 频段均衡器
【发布时间】:2012-12-11 00:53:31
【问题描述】:

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

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

到目前为止,我唯一的成功就是使用 gainNode 来控制音轨的音量。

任何帮助将不胜感激。

谢谢, 斯坦

【问题讨论】:

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


【解决方案1】:

我将继续详细说明我对 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 之后还是在 EQ 之前。你通过做来控制收益

gainNode.gain.value = 0.6;

【讨论】:

  • 如何集成一个增益节点来控制声音的音量。我正在模拟 DJ 音频混音器。再次感谢!
  • 我已将其添加到答案中。 :) 如果对您有帮助,请随时“接受”答案!
  • 我尝试使用 postEQ 方式,但是当 gainNode 增益值为 1.0 时,过滤器不起作用。当我把它降低到 0.95 时,我可以修改滤波器的单独增益音量以听到输出变化。使用 preEQ 方式,我没有从过滤器中听到任何声音。 gist.github.com/4254053
  • 嗨@OskarEriksson,你介意看看这个问题吗? avp.stackexchange.com/questions/6949/… 为了复制“典型”混音器的感觉,您建议在 lowshelf / peak / highshelf BiquadFilters 中放入哪些参数? (目前我的lowshelf频率是80,mid/peak是1000,hi-shelf是8000。我还没有决定mid/peak的Q因子)
猜你喜欢
  • 2012-09-26
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多