BiquadFilterNode可用peaking、lowshelf、highshelf类型构建多段均衡器,推荐并联结构配合ChannelSplitter/ChannelMerger,增益需用setValueAtTime+exponentialRampToValueAtTime平滑调节,注意兼容性与性能优化。

HTML5 Web Audio API 中的 BiquadFilterNode 可用于构建简易但实用的 10 段或更多段均衡器(EQ),通过多个滤波器并联或串联,分别控制不同频段的增益。
理解 BiquadFilterNode 的 EQ 类型
BiquadFilterNode 支持 "peaking"(峰值)、"lowshelf"(低架)、"highshelf"(高架)三种最常用的均衡类型:
-
peaking:在指定中心频率处提供可正可负的增益,带宽由
Q或detune控制,适合中频段精细调节(如 312Hz、1.25kHz、5kHz) - lowshelf:调节所有低于某频率的信号整体增益(如 60Hz–250Hz),影响低频厚度和轰鸣感
- highshelf:调节所有高于某频率的信号整体增益(如 8kHz–16kHz),影响清晰度与齿音表现
构建多段均衡器的典型结构
不建议将 10 个 BiquadFilterNode 串联(会累积相位失真和延迟),推荐使用「并联 + 混合」方式:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 用
ChannelSplitterNode将单声道音频拆分为多路(如 10 路) - 每路接一个独立
BiquadFilterNode,类型设为peaking,中心频率按标准 ISO 1/3 倍频程预设(如 31.5Hz、40Hz、50Hz…16kHz) - 各路滤波后经
GainNode控制该段增益(-12dB 到 +12dB),再由ChannelMergerNode合并输出 - 实际项目中常简化为 5–7 段,兼顾效果与性能;移动端需注意节点数过多可能触发 Safari 的节点限制
动态调节增益的关键写法
每个频段的增益不能直接赋值给 gain.value(会导致跳变),应使用平滑过渡:
- 用
gain.setValueAtTime(currentValue, audioContext.currentTime)设定起始值 - 再调用
gain.exponentialRampToValueAtTime(targetValue, audioContext.currentTime + 0.02)实现 20ms 渐变,避免爆音 - 注意:若 targetValue 为 0,
exponentialRampToValueAtTime会报错,此时改用linearRampToValueAtTime(0, ...) - 所有滤波器的
frequency和Q也支持同理的自动化写入,但peaking滤波器的Q建议固定在 1.0–2.5 之间,避免过窄导致啸叫
兼容性与性能提示
现代浏览器均支持 BiquadFilterNode,但细节行为略有差异:
- Chrome / Edge:对高频段(>10kHz)的
peaking滤波响应更稳定 - Safari(macOS/iOS):
detune参数支持较好,可用它微调中心频率(比直接改frequency更精准) - 低端 Android WebView:节点总数超过 20 个易卡顿,建议启用「按需激活」策略——只让用户拖动过的频段节点处于启用状态,其余 bypass(设
gain.value = 1且不连接) - 调试时可用
audioContext.createAnalyser()接在 EQ 后,实时绘制频谱图验证各段调节是否生效
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










