BaseLatency 是 AudioContext 创建时确定的理论最小固有延迟基准值(0.001–0.05秒),非实时延迟;真实延迟需结合 currentTime 调度、outputLatency(Chrome/Edge 117+支持)及外部测量手段估算。

BaseLatency 是 AudioContext 的一个只读属性,但它并不表示当前音频输出的实时延迟数据,而是一个理论上的、上下文创建时确定的最小固有延迟基准值(单位:秒),由底层音频系统(如操作系统音频子系统、驱动、硬件)决定。它无法动态反映当前实际播放延迟,也不能直接用于测量或校准音频同步。
以下是关键事实与实用说明:
-
baseLatency是常量
一旦AudioContext创建完成,该值就固定不变,通常在0.001(1ms)到0.05(50ms)之间,取决于平台和音频后端(如 Windows WASAPI、macOS Core Audio、Linux ALSA/PulseAudio)。
例如:const audioCtx = new (window.AudioContext || window.webkitAudioContext)(); console.log(audioCtx.baseLatency); // 如:0.01234(约12.3ms)
-
它不等于“当前延迟”或“outputLatency”
baseLatency是音频系统能保证的最低可能延迟下限,不是你代码中start()某个AudioBufferSourceNode后的真实播放延迟。真实端到端延迟还包含:- 节点调度时间(
startTime精度) - 缓冲区大小(
audioCtx.latencyHint影响) - 硬件缓冲(如声卡 DMA buffer)
- 系统负载与调度抖动
- 节点调度时间(
-
真正可参考的延迟相关属性是
outputLatency(仅部分浏览器支持)
Chrome 117+ 和 Edge 117+ 支持audioCtx.outputLatency(同样只读,单位:秒),它比baseLatency更贴近当前音频设备的实际输出延迟估计值(仍为静态快照,非实时更新):if ('outputLatency' in audioCtx) { console.log('Estimated output latency:', audioCtx.outputLatency); // e.g., 0.0245 } -
若需估算真实播放时刻,应使用
audioCtx.currentTime+ 调度逻辑currentTime是音频上下文内部高精度时钟(单位:秒),所有节点的startTime都基于它。要让声音在「将来某个精确音频时间」播放,应:立即学习“前端免费学习笔记(深入)”;
const when = audioCtx.currentTime + 0.1; // 100ms 后 source.start(when);
这样做的延迟误差通常在
baseLatency量级内,但无法消除硬件层不可控抖动。 -
没有 Web API 可实时读取“当前音频输出延迟”
浏览器不暴露底层音频设备的实时延迟反馈(如 JACK 的jack_get_sample_rate()或jack_get_latency_range())。如需高精度同步(如音乐应用、MIDI联动),需依赖:- 使用
AudioWorklet获取更稳定的音频线程时间戳 - 结合 WebRTC
RTCPeerConnection.getStats()中的audioOutputLevel等间接指标(不直接反映延迟) - 客户端主动打点 + 话筒录音 + 声音比对(需用户授权麦克风,且受环境噪声影响)
- 使用
不复杂但容易忽略



















