HTML5 本身不提供音频降噪能力,但可通过 Web Audio API 构建基础降噪链路:用低通滤波(1200–2500 Hz)压制高频嘶声,高通滤波(80–150 Hz)切除低频嗡鸣,串联时需用 GainNode 控制增益并避免削波,配合 range 输入实现平滑频率调节。

HTML5 本身不提供音频降噪能力,但通过 Web Audio API 可以快速构建基础降噪链路——核心不是“彻底消除噪声”,而是用滤波器压制典型干扰频段,提升人声清晰度。关键在于选对滤波类型、设合理截止频率,并避免引入新问题(如失真或爆音)。
低通滤波:压住高频嘶声和键盘杂音
适合处理录音中常见的“刺耳感”:比如麦克风拾取的键盘敲击声、屏幕电磁干扰的高频啸叫、或语音中的齿音过重问题。
- 创建 BiquadFilterNode 后设 filter.type = 'lowpass'
- 截止频率建议从 1200–2500 Hz 开始试听,人声基频集中在 85–255 Hz,但辅音(如 s、t、f)能量在 2–8 kHz,过度压制会发闷
- 可配合 filter.Q.value = 0.7–1.2 控制过渡带陡峭度,Q 值太大会在截止点附近产生共振峰
高通滤波:切掉低频嗡嗡声和空调底噪
针对环境中的持续性低频干扰,例如电脑风扇、老旧空调、电源哼声(50/60 Hz 及其谐波),这些成分会掩盖语音细节并加重文件体积。
- 设 filter.type = 'highpass',频率值通常设在 80–150 Hz 区间
- 低于 80 Hz 的人声能量极弱,切除后几乎不影响可懂度,还能降低后续编码负担
- 注意不要设到 30 Hz 以下——浏览器可能限制极低频响应,且易引发相位异常
串联使用时的关键控制点
单个滤波器效果有限,实际中常把低通和高通串起来模拟“带通”行为,但必须注意信号链增益管理。
立即学习“前端免费学习笔记(深入)”;
- 每个滤波器节点默认有增益偏移,连续连接易导致整体音量升高或削波,建议在最后加一个 GainNode 统一控音量(如 gain.gain.value = 0.75)
- 避免把滤波器直接连 destination,中间插入 GainNode 不仅便于调节,也为后续扩展(如淡出、混响)留出接口
- 移动端 Safari 对 MediaElementSource 支持不稳定,推荐用 fetch + decodeAudioData 加载本地音频再处理,更可控
简单但有效的实时监听方案
不需要复杂算法,也能让用户直观感受滤波效果:
- 用 <input type="range"> 暴露 frequency 控制条,绑定到 filter.frequency.value
- 监听 input 事件,调用 filter.frequency.exponentialRampToValueAtTime(value, ctx.currentTime) 实现平滑变化,防止跳变爆音
- 起始值设为 1 Hz(非 0),因多数浏览器禁止 0 Hz 设置;上限建议封顶在 20000 Hz,避免无效计算



















