html5 音频需结合 web audio api 实现低通滤波,核心是 biquadfilternode;初始化 audiocontext 后创建滤波节点,设 type='lowpass' 并配置 frequency 值,再连接音频图;支持动态调节频率,可用 range 输入框绑定并平滑过渡;注意移动端触发限制、safari 兼容性及增益控制。

HTML5 音频本身不直接提供频率滤波功能,但结合 Web Audio API 可以轻松实现低通、高通、带通等数字滤波效果。核心在于使用 BiquadFilterNode,它内置了多种滤波类型,低通滤波器(Low-pass filter)是最常用的一种,能保留低频成分、衰减高频噪声或刺耳泛音。
创建音频上下文与滤波节点
需先初始化 AudioContext,再创建滤波器节点并连接音频图:
- 调用
new AudioContext()获取上下文(注意移动端需用户手势触发) - 用
context.createBiquadFilter()创建滤波节点 - 设置
type = 'lowpass',并指定截止频率(如filter.frequency.value = 1000表示 1kHz 以下通过) - 将音频源 → 滤波器 → 目标(通常是
context.destination)依次连接
实时调节低通截止频率
滤波器参数支持动态修改,适合做交互式音效控制:
- 用
<input type="range">绑定频率值(例如 20–20000 Hz) - 监听
input事件,更新filter.frequency.value - 可配合
exponentialRampToValueAtTime()实现平滑过渡,避免爆音 - 注意:低于 10 Hz 的频率可能触发浏览器限制,建议设最小值为 1
加载音频并应用滤波的完整示例
以下代码片段可直接运行(需本地服务或 HTTPS 环境):
let audioCtx, filter, source;
const audio = new Audio('sound.mp3');
function initAudio() {
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
filter = audioCtx.createBiquadFilter();
filter.type = 'lowpass';
filter.frequency.value = 1500;
source = audioCtx.createMediaElementSource(audio);
source.connect(filter);
filter.connect(audioCtx.destination);
}
audio.addEventListener('play', () => {
if (audioCtx.state === 'suspended') audioCtx.resume();
}, { once: true });
// 调用 initAudio() 后播放即可听到滤波效果
注意事项与常见问题
实际开发中需留意几个关键点:
- 移动 Safari 对
MediaElementSource支持较弱,推荐用fetch + decodeAudioData加载并播放 ArrayBuffer - 多个滤波器串联时注意增益累积,必要时插入
GainNode控制总音量 - 低通 Q 值(
filter.Q.value)影响过渡带陡峭程度,一般保持默认 1.0 即可,过高易引起共振啸叫 - Web Audio API 不支持直接对
<audio></audio>标签 DOM 属性做滤波,必须走音频节点图
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










