From 0261c5ccaab499cf92f8a380e55541fc1590c4bd Mon Sep 17 00:00:00 2001 From: ross <3024454314@qq.com> Date: Sat, 3 Jan 2026 10:24:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=8E=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zs/smarthuman/sherpa/VoiceController.kt | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt b/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt index 77524ec..d4a24a5 100644 --- a/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt +++ b/app/src/main/java/com/zs/smarthuman/sherpa/VoiceController.kt @@ -110,6 +110,7 @@ class VoiceController( VoiceState.WAIT_SPEECH_COOLDOWN -> { if (now >= speechEnableAtMs) { + waitSpeechFailStartMs = 0L // ⭐ 必须清 state = VoiceState.WAIT_SPEECH waitSpeechStartMs = now // ⭐ 关键:开始等人说话 } @@ -171,12 +172,8 @@ class VoiceController( VoiceState.UPLOADING -> return - // ⭐ 关键:只要不是纯等待唤醒,一律打断 VoiceState.RECORDING, - VoiceState.WAIT_SPEECH, - VoiceState.WAIT_SPEECH_COOLDOWN, VoiceState.PLAYING_BACKEND -> { - Log.d(TAG, "⚠ WakeWord interrupt state=$state") stopBackendAudio?.invoke() enterWakeup(interrupt = true) } @@ -185,21 +182,15 @@ class VoiceController( } } - private fun enterWakeup(interrupt: Boolean) { - + waitSpeechFailStartMs = 0L // ⭐ 唤醒即新会话 + waitSpeechStartMs = 0L if (interrupt) { - Log.d(TAG, "🛑 Interrupt current speech / recording") - audioBuffer.clear() - preBuffer.clear() // ⭐ 防止把旧唤醒词带进去 vadManager.reset() resetEnergyStat() - vadStarted = false silenceStartMs = 0L - waitSpeechStartMs = 0L // ⭐ - waitSpeechFailStartMs = 0L // ⭐ } inKwsObserve = true @@ -209,7 +200,6 @@ class VoiceController( onWakeup() } - /* ================= VAD START ================= */ private fun onVadStart() { @@ -220,6 +210,7 @@ class VoiceController( vadStarted = true recordingStartMs = System.currentTimeMillis() silenceStartMs = 0L + waitSpeechFailStartMs = 0L // ⭐ 新一轮有效说话 waitSpeechStartMs = 0L // ⭐ 清掉“等待说话”超时 resetEnergyStat()