SWITCH-FORCE 3s 冷却闸:实测强切落地链需1~2s完成,期间下一深低窗再开一枪(双发);冷却期内 suppressed(cooldown) 只记日志不再触发,去噪+防叠发;首次真机开火验证通过(deep-low 0.21 首窗即切+label=S1 防双号命中)

This commit is contained in:
liwenhao2 2026-09-16 10:59:39 +08:00
parent 0b731978ef
commit 6239f0a37e
1 changed files with 30 additions and 16 deletions

View File

@ -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)
}
}
}
}