From 4fc306bccf7c4018a8bd8592084627122d702536 Mon Sep 17 00:00:00 2001 From: Harold Date: Wed, 12 Nov 2025 15:00:39 +0800 Subject: [PATCH] fix(web-audio): Fix AudioWorklet recording and AudioContext state issues --- main/xiaozhi-server/test/test_page.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main/xiaozhi-server/test/test_page.html b/main/xiaozhi-server/test/test_page.html index a6672dbc..b9fc5c85 100644 --- a/main/xiaozhi-server/test/test_page.html +++ b/main/xiaozhi-server/test/test_page.html @@ -1430,6 +1430,13 @@ }; log('使用AudioWorklet处理音频', 'success'); + + // 需要连接输出,否则不会触发处理 + // 我们创建一个静音通道 + const silent = audioContext.createGain(); + silent.gain.value = 0; + audioProcessor.connect(silent); + silent.connect(audioContext.destination); return { node: audioProcessor, type: 'worklet' }; } else { // 使用旧版ScriptProcessorNode作为回退方案 @@ -1604,6 +1611,11 @@ // 创建音频上下文和分析器 audioContext = getAudioContextInstance(); + // 浏览器出于安全和性能考虑,新创建的 AudioContext 默认处于 suspended 状态,必须显式调用 resume() 才会开始处理音频。 + if (audioContext.state === 'suspended') { + await audioContext.resume(); + } + // 创建音频处理器 const processorResult = await createAudioProcessor(); if (!processorResult) {