专业级Web Audio EQ需用多个peaking型BiquadFilterNode串联,按ISO 1/3倍频程分7段(31Hz–14kHz),配合gain.frequency.Q的平滑自动化更新、高精度UI滑块(支持键盘微调)及Canvas频响曲线+实时频谱可视化。

用 Web Audio API 实现专业级频率均衡器(EQ),核心在于组合多个 BiquadFilterNode,配合动态参数控制与可视化反馈。它不是简单拖动滑块,而是要模拟真实调音台的频段划分、Q 值响应、增益精度和实时联动——关键在滤波器类型选择、频点分组策略和参数平滑更新。
按专业调音台逻辑划分频段(如 7 段参量 EQ)
典型广播/录音室调音台常用 31 Hz–16 kHz 范围内 7–31 个等比间隔中心频点(如 ISO 标准 1/3 倍频程)。前端可预设常用频段:31Hz(超低)、125Hz(低频)、400Hz(中低)、1.2kHz(中频)、3.5kHz(中高)、8kHz(高频)、14kHz(空气感)。每个频段对应一个 BiquadFilterNode,类型统一设为 "peaking"(峰值滤波器),支持正负增益调节。
- 创建节点时用
audioContext.createBiquadFilter() - 设置初始
frequency.value(如 125)、Q.value(决定带宽,常用 1.414 或 2.0)、gain.value(单位:dB,范围建议 -24 ~ +12) - 所有滤波器串联接入音频图(
filter1.connect(filter2)),首尾接source和destination
实现平滑、无爆音的实时增益/频点调节
直接赋值 gain.value = newValue 会造成跳变和咔嗒声。必须使用自动化方法:
- 用
gain.setValueAtTime(currentValue, audioContext.currentTime)设定起始值 - 再用
gain.linearRampToValueAtTime(targetValue, audioContext.currentTime + 0.02)在 20ms 内线性过渡(人耳不可察觉跳变) - 若需更自然响应(如模拟模拟电路惯性),可用
exponentialRampToValueAtTime,但注意增益不能 ≤ 0 - 频点(
frequency)和 Q 值也可同理平滑变更,尤其在扫频调试时至关重要
同步 UI 滑块与音频参数,并支持键盘微调
每个频段对应一个 <input type="range">,但原生滑块精度低、无 dB 刻度。建议:
立即学习“前端免费学习笔记(深入)”;
- 滑块
value映射为 dB 值(如range.value = -24 ~ +12→gain = parseInt(range.value)) - 绑定
input事件(非change),保证拖拽过程实时响应 - 支持键盘上下键微调(步进 ±0.5dB),
PageUp/PageDown±2dB,提升专业操作效率 - 滑块旁显示当前 dB 值(如 +3.2 dB),并用颜色区分衰减(红)/提升(蓝)
添加频响曲线可视化与频谱分析辅助
纯滑块无法直观判断整体频响。可叠加 Canvas 绘制实时响应曲线:
- 用
OfflineAudioContext预生成各频点单位脉冲响应,或通过数学公式计算peaking滤波器幅频响应:|H(f)| = √[1 + (A/Q)²·(f/f₀)² + A²·(f/f₀)⁴] / √[1 + (1/Q)²·(f/f₀)² + (f/f₀)⁴] - 在 Canvas 上绘制 31Hz–16kHz 对数横轴、纵轴为 dB 的曲线,叠加所有滤波器合成响应
- 接入
AnalyserNode实时 FFT 分析输入信号,在曲线下方叠加频谱柱状图,验证实际提升/衰减效果 - 点击曲线任意位置可反向定位到最近频段滑块,支持“所见即所得”调整



















