快速通道修正(踩了v8.1短窗雷:2s窗+base模型同人相似度0.05~0.7狂震,90秒7次误切S2-S7):判定窗改回4s(与主通道同源)、周期1s保留(唯一提速来源)、阈值回0.35;占号前先查注册表——认出当前人销案/认出别人复用编号/陌生才发新号
This commit is contained in:
parent
70acc03ce4
commit
7ade8283c7
|
|
@ -221,13 +221,14 @@ class MainActivity : AppCompatActivity() {
|
|||
private val onsetMinSamples = 19200 // 1.2s 开口窗
|
||||
// 喂料恒定滞后(2026-09-16):识别流滞后 1.2s 喂入,切点前的音频可改道;
|
||||
// 全局字幕延迟 ~1.2s 的代价换取换人零串行
|
||||
// 快速滚动通道(2026-09-16 用户拍板乐观快切):2s 尾窗/1s 周期/偏离
|
||||
// 0.32 即切;准确复核只善后,切错由判定链并回自愈
|
||||
// 快速滚动通道(2026-09-16 用户拍板乐观快切):4s 窗(与主通道同源
|
||||
// 同尺寸——base 模型短窗(≤2s)同人相似度 0.05~0.7 狂震是 v8.1
|
||||
// 换人风暴的根因,勿再踩)/1s 周期(唯一提速来源)/0.35 与主通道同款;
|
||||
// 占号前先查注册表复用编号;准确复核只善后,切错由判定链并回自愈
|
||||
private val fastRollEnabled = true
|
||||
private val fastRollDrop = 0.32f
|
||||
private val fastStepSamples = 16000 // 1s
|
||||
private val fastWinSamples = 32000 // 2s 尾窗
|
||||
private val fastMinSamples = 24000 // ≥1.5s 才判
|
||||
private val fastWinSamples = 64000 // 4s 窗(全窗)
|
||||
private val fastMinSamples = 48000 // ≥3s 才判(同 judgeMinSamples)
|
||||
private val feedLagSamples = 24000 // 1.5s:覆盖判定链(1.2s采集+计算)的
|
||||
// 余量,开口渗漏≈0;全局字幕延迟即此值,调参范围 1.2~1.5s
|
||||
@Volatile private var onsetSeq = 0L // 行切换/会话开始作废在途开口判定
|
||||
|
|
@ -744,20 +745,27 @@ 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 >= speakerSwitchDrop) return@post
|
||||
val active = activeLabelForWindow
|
||||
// 先查注册表:认出当前人 → 销案(白捡的防护);
|
||||
// 认出别人 → 复用其编号;彻底陌生才发新号
|
||||
val known = rollingSpeakerSearch(emb)
|
||||
if (known != null && known == active) return@post
|
||||
val nowMs = SystemClock.elapsedRealtime()
|
||||
if (nowMs - lastForceSwitchAtMs < 3_000L) {
|
||||
Log.i(TAG, "FASTROLL suppressed (cooldown)")
|
||||
return@post
|
||||
}
|
||||
lastForceSwitchAtMs = nowMs
|
||||
val active = activeLabelForWindow
|
||||
val label = SpeakerRecognition.nextAutoLabel().also {
|
||||
SpeakerRecognition.fastRegistry.addAuto(it, emb)
|
||||
}
|
||||
val label = known
|
||||
?: SpeakerRecognition.nextAutoLabel().also {
|
||||
SpeakerRecognition.fastRegistry.addAuto(it, emb)
|
||||
}
|
||||
Log.i(TAG, "FASTROLL-SWITCH sim=" +
|
||||
"%.2f".format(sim) +
|
||||
" label=$label active=${active ?: "-"}")
|
||||
" label=$label kind=" +
|
||||
(if (known != null) "known" else "new") +
|
||||
" active=${active ?: "-"}")
|
||||
cutRequested = true
|
||||
uiHandler.post { onOnsetSwitch(label) }
|
||||
accurateRecheckAfterSwitch(tailF, label, active, "FASTROLL")
|
||||
|
|
|
|||
Loading…
Reference in New Issue