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 rollingLowStreak = 0
@Volatile private var pendingForceEndpoint = false @Volatile private var pendingForceEndpoint = false
private val forceSwitchStreaks = 2 private val forceSwitchStreaks = 2
// 强切冷却(仅 speakerCheckHandler 线程访问,无需 volatile)
private var lastForceSwitchAtMs = 0L
// C(最新者胜):每次投递滚动检测都刷新序号,队列里被超额的旧任务直接跳过 // C(最新者胜):每次投递滚动检测都刷新序号,队列里被超额的旧任务直接跳过
@Volatile private var rollingSeq = 0L @Volatile private var rollingSeq = 0L
// 兜底残料:当前句子槽位最近一次滚动窗口声纹。整句判定因碎片算不出 // 兜底残料:当前句子槽位最近一次滚动窗口声纹。整句判定因碎片算不出
@ -787,22 +789,34 @@ class MainActivity : AppCompatActivity() {
rollingLowStreak >= forceSwitchStreaks rollingLowStreak >= forceSwitchStreaks
) { ) {
rollingLowStreak = 0 rollingLowStreak = 0
val label = newLabel // 3s 冷却闸(2026-09-16 实测:
?: SpeakerRecognition.nextAutoLabel() // 强切落地链要 1~2s 完成,期间
.also { // 下一个深低窗会再开一枪,日志
SpeakerRecognition // 双发;功能无害但去噪+防叠发)
.fastRegistry val nowMs = SystemClock.elapsedRealtime()
.addAuto(it, emb) if (nowMs - lastForceSwitchAtMs < 3_000L) {
} Log.i(TAG, "SWITCH-FORCE" +
Log.i(TAG, "SWITCH-FORCE" + " suppressed (cooldown)" +
(if (deepLow) " owner=sid$owner")
" deep-low<${deepLowSwitch}" } else {
else lastForceSwitchAtMs = nowMs
" streak>=$forceSwitchStreaks") + val label = newLabel
" label=$label" + ?: SpeakerRecognition.nextAutoLabel()
" owner=sid$owner") .also {
uiHandler.post { SpeakerRecognition
onOnsetSwitch(label) .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)
}
} }
} }
} }