主动撤销加强度门槛(实锤:短插嘴混合窗复核0.5~0.6弱匹配误撤了sim=0.04的真实异常):复核改用 nearestRank 名字级分数,CANCEL 需 score≥0.68(同人确认实测0.70~1.00安全带)且为当前人;弱匹配走 WEAK-SAME 留痕让切换立住;三类复核日志全部带分数,下次定罪不再靠猜

This commit is contained in:
liwenhao2 2026-09-16 16:17:38 +08:00
parent 898c5969e3
commit 31762d4627
1 changed files with 19 additions and 5 deletions

View File

@ -221,6 +221,10 @@ class MainActivity : AppCompatActivity() {
private val onsetMinSamples = 19200 // 1.2s 开口窗 private val onsetMinSamples = 19200 // 1.2s 开口窗
// 喂料恒定滞后(2026-09-16):识别流滞后 1.2s 喂入,切点前的音频可改道; // 喂料恒定滞后(2026-09-16):识别流滞后 1.2s 喂入,切点前的音频可改道;
// 全局字幕延迟 ~1.2s 的代价换取换人零串行 // 全局字幕延迟 ~1.2s 的代价换取换人零串行
// 主动撤销的强度门槛(2026-09-16 实锤:短插嘴混合窗复核出 0.5~0.6 弱匹配,
// 二元"认得出"误撤了 0.04 深低的真实异常;同人确认分实测 0.70~1.00,
// 0.68 取安全带) —— 复核低于此分只留痕不撤销,让切换立住
private val revertCancelMin = 0.68f
// 快速滚动通道(2026-09-16 用户三次拍板后终定 C:维持 2s 窗——最快档, // 快速滚动通道(2026-09-16 用户三次拍板后终定 C:维持 2s 窗——最快档,
// 接受误切闪烁,由并回自愈兜底)。窗长演化留档:2s(风暴,单窗20发/5min) // 接受误切闪烁,由并回自愈兜底)。窗长演化留档:2s(风暴,单窗20发/5min)
// →3s(折中)→ 终选回 2s;护持:连续两窗/注册表复用/销案/冷却/并回自愈。 // →3s(折中)→ 终选回 2s;护持:连续两窗/注册表复用/销案/冷却/并回自愈。
@ -1819,16 +1823,26 @@ class MainActivity : AppCompatActivity() {
) { ) {
val acc = SpeakerRecognition.computeEmbedding(samples, sampleRateInHz) val acc = SpeakerRecognition.computeEmbedding(samples, sampleRateInHz)
?: return ?: return
val pre = SpeakerRecognition.registry.search(acc, speakerThreshold) val r = SpeakerRecognition.registry.nearestRank(acc)
?: nearestAttribution(acc, SpeakerRecognition.registry, verdictFallbackMin) val pre = r.name
val score = r.score
when { when {
pre != null && pre == active -> { pre != null && pre == active && score >= revertCancelMin -> {
Log.i(TAG, tag + "-CANCEL-LATE known=$pre(active) active-heal") Log.i(TAG, tag + "-CANCEL-LATE known=$pre(active)" +
" score=" + "%.2f".format(score) + " active-heal")
// 主动善后:不再被动等句子结束(长句让错标挂几十秒),立即撤销 // 主动善后:不再被动等句子结束(长句让错标挂几十秒),立即撤销
uiHandler.post { revertOnsetSwitch(label, pre) } uiHandler.post { revertOnsetSwitch(label, pre) }
} }
pre != null && pre == active -> {
// 弱匹配(短插嘴混合窗常见 0.5~0.6):不撤销,让切换立住
Log.i(TAG, tag + "-WEAK-SAME known=$pre" +
" score=" + "%.2f".format(score) +
" < $revertCancelMin keep-switch")
}
pre != null -> pre != null ->
Log.i(TAG, tag + "-RECHECK known=$pre label=$label (verdict migrates)") Log.i(TAG, tag + "-RECHECK known=$pre" +
" score=" + "%.2f".format(score) +
" label=$label (verdict migrates)")
else -> SpeakerRecognition.registry.addAuto(label, acc) else -> SpeakerRecognition.registry.addAuto(label, acc)
} }
} }