概述AudioWorklet 允许将音频处理迁移至专用上下文,提供更稳定的低延迟处理能力。通过 `audioWorklet.addModule` 注册处理器并在图中使用 `AudioWorkletNode`。用法/示例const ctx = new AudioContext() await ctx.audioWorklet.addModule('/meter.js') const meter = new AudioWorkletNode(ctx, 'meter') meter.port.onmessage = e => { const v = e.data } const src = ctx.createMediaElementSource(document.querySelector('audio')) src.connect(meter).connect(ctx.destination) // meter.js class MeterProcessor extends AudioWorkletProcessor { process(inputs) { const input = inputs[0][0] || new Float32Array(0) let s = 0 for (let i = 0; i < input.length; i++) s += input[i] * input[i] const rms = Math.sqrt(s / (input.length || 1)) this.port.postMessage(rms) return true } } registerProcessor('meter', MeterProcessor) 工程建议控制处理负载,避免在单次 `process` 中执行大量同步计算;必要时分片。对设备与采样率差异进行适配,避免缓冲大小不一致导致的抖动。管理节点与端口生命周期,确保释放与错误处理。参考与验证MDN:AudioWorklet — https://developer.mozilla.org/docs/Web/API/AudioWorkletWeb Audio API 规范 — https://www.w3.org/TR/webaudio/web.dev:AudioWorklet — https://web.dev/articles/audio-worklet

发表评论 取消回复