From 88b5e9279c66adc8225c6bf9b723b562a7aa713a Mon Sep 17 00:00:00 2001 From: liwenhao2 Date: Wed, 16 Sep 2026 15:44:41 +0800 Subject: [PATCH] =?UTF-8?q?2=E7=A7=92=E5=BF=AB=E9=80=9F=E9=80=9A=E9=81=93?= =?UTF-8?q?=E5=8A=A0=E8=BF=9E=E7=BB=AD=E4=B8=A4=E7=AA=97=E9=97=B8:?= =?UTF-8?q?=E5=8D=95=E7=AA=97=E5=88=A4=E5=86=B3=E5=9C=A82s+base=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E4=B8=8A=E5=88=86=E4=B8=8D=E5=BC=80=E6=8D=A2=E5=A3=B0?= =?UTF-8?q?=E4=B8=8E=E5=99=AA=E5=A3=B0(=E7=8E=B0=E5=9C=BA5=E5=88=86?= =?UTF-8?q?=E9=92=9F20=E5=8F=91/21=E5=81=87=E5=8F=B7/=E8=B4=9F=E4=BD=99?= =?UTF-8?q?=E5=BC=A6-0.02=E9=93=81=E8=AF=81;=E5=90=8C=E6=97=B6=E5=88=BB4s?= =?UTF-8?q?=E9=80=9A=E9=81=930.85);=E8=BF=9E=E7=BB=AD=E4=B8=A4=E7=AA=97?= =?UTF-8?q?=E4=BD=8E=E5=88=86=E6=89=8D=E5=BC=80=E7=81=AB=E2=80=94=E2=80=94?= =?UTF-8?q?=E7=9C=9F=E4=BA=BA=E6=8D=A2=E5=A3=B0=E8=BF=9E=E7=AA=97=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=80=A7=E5=BC=BA(=E5=BC=80=E7=81=AB2.5~3s=E4=BB=8D?= =?UTF-8?q?=E5=BF=AB=E4=BA=8E4s=E9=80=9A=E9=81=93),=E5=AD=A4=E7=AB=8B?= =?UTF-8?q?=E5=9E=83=E5=9C=BE=E7=AA=97=E8=A2=AB=E6=BB=A4;=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E8=A1=A8=E9=94=80=E6=A1=88/=E5=86=B7=E5=8D=B4/?= =?UTF-8?q?=E5=B9=B6=E5=9B=9E=E8=87=AA=E6=84=88=E4=BF=9D=E7=95=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/k2fsa/sherpa/onnx/MainActivity.kt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 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 6f12324..5eda3f1 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt @@ -250,6 +250,9 @@ class MainActivity : AppCompatActivity() { private val forceSwitchStreaks = 2 // 强切冷却(仅 speakerCheckHandler 线程访问,无需 volatile) private var lastForceSwitchAtMs = 0L + // 快速通道连续低分计数(同上,单线程访问)。2026-09-16 现场:2s 窗 + // 垃圾窗孤发(负余弦都出现),单窗判决分不开换声与噪声 → 连续两窗闸 + private var fastRollLowStreak = 0 // C(最新者胜):每次投递滚动检测都刷新序号,队列里被超额的旧任务直接跳过 @Volatile private var rollingSeq = 0L // 兜底残料:当前句子槽位最近一次滚动窗口声纹。整句判定因碎片算不出 @@ -748,12 +751,21 @@ class MainActivity : AppCompatActivity() { tailF, sampleRateInHz) ?: return@post if (rseq != onsetSeq) return@post val sim = SpeakerRecognition.similarity(emb, anchor) - if (sim >= fastRollDrop) return@post + if (sim >= fastRollDrop) { + fastRollLowStreak = 0 + return@post + } + fastRollLowStreak += 1 + if (fastRollLowStreak < 2) return@post + fastRollLowStreak = 0 val active = activeLabelForWindow // 先查注册表:认出当前人 → 销案(白捡的防护); // 认出别人 → 复用其编号;彻底陌生才发新号 val known = rollingSpeakerSearch(emb) - if (known != null && known == active) return@post + if (known != null && known == active) { + fastRollLowStreak = 0 + return@post + } val nowMs = SystemClock.elapsedRealtime() if (nowMs - lastForceSwitchAtMs < 3_000L) { Log.i(TAG, "FASTROLL suppressed (cooldown)")