From 6239f0a37e15b6db1a13375328d65e7b2f0f3f5e Mon Sep 17 00:00:00 2001 From: liwenhao2 Date: Wed, 16 Sep 2026 10:59:39 +0800 Subject: [PATCH] =?UTF-8?q?SWITCH-FORCE=203s=20=E5=86=B7=E5=8D=B4=E9=97=B8?= =?UTF-8?q?:=E5=AE=9E=E6=B5=8B=E5=BC=BA=E5=88=87=E8=90=BD=E5=9C=B0?= =?UTF-8?q?=E9=93=BE=E9=9C=801~2s=E5=AE=8C=E6=88=90,=E6=9C=9F=E9=97=B4?= =?UTF-8?q?=E4=B8=8B=E4=B8=80=E6=B7=B1=E4=BD=8E=E7=AA=97=E5=86=8D=E5=BC=80?= =?UTF-8?q?=E4=B8=80=E6=9E=AA(=E5=8F=8C=E5=8F=91);=E5=86=B7=E5=8D=B4?= =?UTF-8?q?=E6=9C=9F=E5=86=85=20suppressed(cooldown)=20=E5=8F=AA=E8=AE=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=B8=8D=E5=86=8D=E8=A7=A6=E5=8F=91,?= =?UTF-8?q?=E5=8E=BB=E5=99=AA+=E9=98=B2=E5=8F=A0=E5=8F=91;=E9=A6=96?= =?UTF-8?q?=E6=AC=A1=E7=9C=9F=E6=9C=BA=E5=BC=80=E7=81=AB=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E9=80=9A=E8=BF=87(deep-low=200.21=20=E9=A6=96=E7=AA=97?= =?UTF-8?q?=E5=8D=B3=E5=88=87+label=3DS1=20=E9=98=B2=E5=8F=8C=E5=8F=B7?= =?UTF-8?q?=E5=91=BD=E4=B8=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/k2fsa/sherpa/onnx/MainActivity.kt | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt index 0ff9b25..dbedd5f 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt @@ -230,6 +230,8 @@ class MainActivity : AppCompatActivity() { @Volatile private var rollingLowStreak = 0 @Volatile private var pendingForceEndpoint = false private val forceSwitchStreaks = 2 + // 强切冷却(仅 speakerCheckHandler 线程访问,无需 volatile) + private var lastForceSwitchAtMs = 0L // C(最新者胜):每次投递滚动检测都刷新序号,队列里被超额的旧任务直接跳过 @Volatile private var rollingSeq = 0L // 兜底残料:当前句子槽位最近一次滚动窗口声纹。整句判定因碎片算不出 @@ -787,22 +789,34 @@ class MainActivity : AppCompatActivity() { rollingLowStreak >= forceSwitchStreaks ) { rollingLowStreak = 0 - val label = newLabel - ?: SpeakerRecognition.nextAutoLabel() - .also { - SpeakerRecognition - .fastRegistry - .addAuto(it, emb) - } - Log.i(TAG, "SWITCH-FORCE" + - (if (deepLow) - " deep-low<${deepLowSwitch}" - else - " streak>=$forceSwitchStreaks") + - " label=$label" + - " owner=sid$owner") - uiHandler.post { - onOnsetSwitch(label) + // 3s 冷却闸(2026-09-16 实测: + // 强切落地链要 1~2s 完成,期间 + // 下一个深低窗会再开一枪,日志 + // 双发;功能无害但去噪+防叠发) + val nowMs = SystemClock.elapsedRealtime() + if (nowMs - lastForceSwitchAtMs < 3_000L) { + Log.i(TAG, "SWITCH-FORCE" + + " suppressed (cooldown)" + + " owner=sid$owner") + } else { + lastForceSwitchAtMs = nowMs + val label = newLabel + ?: SpeakerRecognition.nextAutoLabel() + .also { + SpeakerRecognition + .fastRegistry + .addAuto(it, emb) + } + Log.i(TAG, "SWITCH-FORCE" + + (if (deepLow) + " deep-low<${deepLowSwitch}" + else + " streak>=$forceSwitchStreaks") + + " label=$label" + + " owner=sid$owner") + uiHandler.post { + onOnsetSwitch(label) + } } } }