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,6 +789,17 @@ class MainActivity : AppCompatActivity() {
rollingLowStreak >= forceSwitchStreaks rollingLowStreak >= forceSwitchStreaks
) { ) {
rollingLowStreak = 0 rollingLowStreak = 0
// 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 val label = newLabel
?: SpeakerRecognition.nextAutoLabel() ?: SpeakerRecognition.nextAutoLabel()
.also { .also {
@ -814,6 +827,7 @@ class MainActivity : AppCompatActivity() {
} }
} }
} }
}
stream.acceptWaveform(samples, sampleRate = sampleRateInHz) stream.acceptWaveform(samples, sampleRate = sampleRateInHz)
while (onlineRecognizer.isReady(stream)) { while (onlineRecognizer.isReady(stream)) {