Files
SoundGame/research/new8/radio/round3/live-player.md
T
xsl 45124a1b9b feat(new8): 批次1收口——radio/dungeon 双双标记可交付(R3 synthesis×2 + H1 热修 + 定向live复验PASS)
- radio:R3 放行(4/4 人设满分档 5/5、愿意玩、P0=0;live 四修坐实+SA3 真声入局)
- dungeon:R1 0/4→R3 4/4 翻案达成;H1 死亡结算链截断根修(真凶=双击窗幽灵 tap 死后回调路由进 SETTLE,800ms 手势死窗;7 断言含旧代码反证)+ 定向 live 复验 PASS(两局含 R3 同款幽灵场景,结算链 7 句逐句完整)
- 章程账本更新:批次 1 验收 ☑(R4-R6 经用户裁定暂停,视上手反馈续;v2 首条=漫游迷路抢救盲区)
- 断言账面:radio 246 / dungeon 1649 / 9 套件全绿
2026-09-03 03:01:45 +08:00

101 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 《不眠频率》R3 收口确认轮 · 全拟真试玩报告 — 老墨(走心局)
## 基本信息
live harness(真 chromium + SenseVoice ASR 听游戏实况,非 mock)。本轮为 **R3 打磨修复(G1-G6)的现场确认轮**,顺带对 SA3 落地后未经 live 检验的 arg_muffled / brake_screech 取证。
- 设置:`voice=male, speed=1.0, bgm=1.0, guide=full`
- 路线:走心局 p1L/p2L/p3L/p4R(问她)/p5L/p6L/p7L/p8L/p9L → **e1「天亮之前」**,**rep=12 与设计表分毫不差**(+1+2+2+1+1+2+2+1),五 bond 全 1
- 手势 65 个(tap 38 / swipeup 7 / swipeleft 9 / swipedown 2 / swiperight 1,含有效/无效各类),语音 **125 段**
- 判定:**OK 119 / SFX_BGM_ONLY 70 / TRUNCATED 4 / MISMATCH 2 / SILENCE 0**
- 4 处 TRUNCATED 全部归因到我自己的手势(p1 mid-prompt 缓存滑 / bridge 上滑打断 rep_high 播报 / 0.16s sys_help 竞态毛刺见 P3-1 / 我的 tap 与 gd_continue 起播撞在同 0.3s);**0 处游戏自残截断**
- 2 处 MISMATCH 均为 ≤6 字短句 ASR 同音(z1_songo 0.56 / sys_menu_resume 0.57),事件层双双足时播放——按协议不算游戏问题
- 报错:**console 事件 = 0**;零叠音(125 段 vstart 全部晚于上一 vend)、零死锁
- t= 均为解锁后秒数(events 时基 ta);震动模式记法同 haptics.js(confirm[20] / warning[30,50,30,50,30] / beat[8] / error[60,40,60] / danger[25,40,25,40,25])
---
## G1-G6 逐条现场结论
> 判「修好」标准:R2 synthesis 记录的旧行为做出同样操作后不再出现,且新行为被事件/音频双重证据锁定。
### G1 帮助链去重 → **修好**(三类等待点 ×2 次上滑全部干净)
- **ONAIR(S:z1_ring_in)**:第 1 次上滑 t=186.7 → prog_c1(2.24s) → rep_low → **sys_help 完整 9.04s**;同点第 2 次上滑 t=223.8 → `[10]+warning+beat[8]`,语音只有 prog_c1 → rep_low → z1_ring_in 复播,**events 里 sys_help 的 fetch 与 vstart 一个都没有**——口令一次没重播,状态句照播。
- **BRIDGE(键 'B')**:第 1 次上滑 t=839.0(C2→C3 幕间)→ prog_c3 → rep_high →(sys_help 已入队);我 10 秒后的第 2 次上滑 t=849.3 掐掉在播的 rep_high,**新链只排 prog_c3 → rep_high**,`beat[8]`@849.66,无 sys_help——去重生效。
- **ENDING(E:e1)**:第 1 次上滑 t=1588.6 → e1_a(7.68s 足时) → rep_high → **sys_help 完整 9.07s**;第 2 次上滑 t=1611.3 → `[10]+beat[8]`,e1_a → rep_high,**无 sys_help**。
- **换新等待点首次上滑仍完整口令**:三处首滑全部完整播 sys_help(3/3)。全场 sys_help vstart 总数 = 3(两处全量 + 一处 0.16s 竞态毛刺见 P3-1),对比 R2 压力局 38 次逐字重播——公理「提示永不逐字重复」现场闭环。
- 边界说明:①「sys_skip 每实例一次」同款的重进游戏重置口径本轮未复测(需二次会话),代码注记与实现一致(实例级 Set);② nudge earcon 为振荡器运行时合成,不产生 ABSN 事件,事件层不可见,混音层 0.1s 窗口与垫乐不可分离——以 `beat[8]` + 零 sys_help fetch 为准签名(P3-2 有仪器侧建议)。
### G2 rep_low 补 warning 震 → **修好**(含阴性对照)
- 全场 `warning[30,50,30,50,30]` 恰好 **2 次**:t=187.1 与 t=224.1——正是仅有的两次 rep=0 档上滑复听,「还没立起来」出口同时手腕有感,与 TIER_VOICES 注记终于一致(R1 P3-3 / R2 P3 遗留销案)。
- **阴性对照**:rep=mid/high 的全部播报位(bridge 跨档 rep_high t=837.9、ENDING 上滑 rep_high t=1596.8/1619.6、五段尾声)**零 warning**——震与档位精确挂钩,不是逢上滑就震。
- 覆盖说明:幕间 enterBridge 的 rep_low 分支(game.js L838)走心路线到不了(rep 只升不降),该支路与上滑位同用一个 `_tierCue`/同款 vibrate('warning') 调用,本轮以两处实测 + 代码同源作证。
### G4 不可跳句空点单击轻震 → **修好**(6 例连击签名,无一误伤)
- 签名 = gesture 层 `[20]` 后 0.0-0.4s 内跟一记 game 层 `beat[8]`(20→8 连击 ≠ 真确认的单记 20),且被点句子**足时播完**:
- 抉择提示句(PROMPT_RE 支路)×2:**p3** t=722.5(起播后 2.0s 处单击,6.03s 足时)、**p5** t=1047.0(7.52s 足时);
- F5 链末句支路 ×4:l1_a t=670.9(9.2s 足时)、l1_goo t=828.3、k1_trutho t=1079.9(10.96s 足时)、w1_a t=1171.4——本作通话叙事句全是链末等待型节点,播播中单击一律「点了但没选上」+轻震。
- 对照组:抉择**等待态**(voicePlaying=false)空点 t=314.8 只有 `[20]` 无 `[8]`,走 armChoiceHint 重挂兜底——两条支路区分干净,R2 P3-4「像点上了实则什么都没发生」的误导签名消失。
### G6 上滑状态链「状态在前、帮助垫后」→ **修好**(三处实测同序)
- ONAIR t=187.2-200.7:**prog_c1 → rep_low → sys_help → 节点复播**;
- BRIDGE t=839.5 起:**prog_c3(下一通) → rep_high → (help)**;
- ENDING t=1589.0-1608.8:**e1_a(结局名) → rep_high → sys_help**。
- 三类等待点顺序完全一致:先报「第几通/第几个结局 + 口碑档」,帮助永远垫底。RING 位按 §2.3 本就无帮助句(代码注记),本轮未单独复测。
---
## 整体回归(一局到结局)
- **完整走心局打出 e1**,rep=12 分毫不差;条件差分全对:p4R→heardArgument=true → C4 播 **w1_say 组**(非 w1_say2);bond_zhou=1 → **h1_echo t=1449.79 在 h1_talke vend 后 0.10s 准点接入**;五 bond 全 1 → 尾声 **ep_zhou/deer/kid/wife/han_ok 五连全救版**逐条点名;p9L → knot → d9_face 链 + **tape_static**。
- **SA3 真音效全部在局内起播(fetch 全 200,ABSN 全部持到自然结束)**:
- **onair_sting** t=2.19(2.14s,b_open 开台);
- **phone_ring** 三通 RING 循环垫(5.2s loop,接听即停早于人声:C1 stop@109.84 vs 人声 109.94 等);
- **line_drop** 五通挂断咔哒 ×5、**line_connect** 接通 ×5;
- **amb_rain_city / amb_station / amb_kid_room / amb_street_rain / amb_cab** 五个场景垫全起;
- **arg_muffled(C3 争吵闷响)**:k1_b 上**两次**起播——本体 t=964.04 与句中回声 t=970.54(= k1_b 起播 +6.5s,sfxEcho 设计值),各 4.58s 持到自然结束,无 stop 事件——「2-3 次取 2」的信息层线索音落地;听感证据为引擎层双起播(混音层与语音/垫乐重叠,astats 无法单列,RMS 差 ~1dB 不作数)。
- **brake_screech(C5 危机拍)**:t=1432.82 与 danger 长震 `[25,40,25,40,25]` **同帧起播**,2.38s 持到结束,**先于人声 h1_danger 整整 2.10s**(preMs 2000 设计值,R2 实测 2.1s 复现)——刹车声→预警句→dango 的自动流一气呵成,全程不等单击。
- F1-F5 无回潮:无效手势零静默(我在叙事链末误滑 3 次全是 error[60,40,60]+gd_invalid,看门狗照常重挂);看门狗全准点(gd_continue/gd_again 25s+25s、gd_ring1/gd_ring2 10s/25s 多轮);F3 接听即停 ×3;F5 尾句 d9_facee(5.30s)/h1_talke(3.52s) 足时;mid-prompt 缓存滑照常零插播生效(p7 t=1302.5);菜单开合(ENDING 结算态 swipedown → 菜单 → 再 swipedown → 结局链从头无缝复播)正常。
- G3 旁证:male 目录缺失的 19 句 NPC 平铺组每次播放先探 4 个扩展名 404 后回退平铺 200 播出,功能与音色衔接无碍(设计即单音色);非资产类 **console=0**。
---
## 问题清单
### P0(卡死/死锁/状态混乱/游戏自残截断)
无。
### P1(体验断裂)
无。
### P2(不适/设计意图缺席)
无。
### P3(建议,3 条)
1. **连续上滑的链令牌竞态毛刺**:BRIDGE 第 2 次上滑落在 rep_high 自然结束前 0.08s(t=849.30 vs vend 849.38),被掐链的续播回调抢先放出了 0.16s 的 sys_help 毛刺(vstart 849.50 → vend 849.66 kill)才被新链令牌叫停。功能无损(新链去重正确、听感是一声咔),但复现窗 <0.1s 的竞态说明 `_playSeq` 续播处的令牌校验晚于语音起播,建议把 seqToken 检查前移到队列出队之前。
2. **nudge earcon 无事件层签名**(仪器侧):earcon 走振荡器合成,探针七类 patch 均不经过,G1 去重的「纯音频标记」只能靠 beat[8]+零 sys_help 反证。建议 harness inject.js 给 `guide._playEarcon` 加一类轻探针(或在 dev 侧 emit 一条 debug 事件),下一轮可把「震+声」双证据钉死。
3. **抉择等待态提示句仍 25s 逐字重播**:p3 在抉择等待期以 25s 间隔整句重播了两遍(t=751.3 / 777.3,armChoiceHint 看门狗兜底)。与 G1 刚兑现的「提示永不逐字重复」公理同源——等待点帮助已去重,ASK 态的选项句还是逐字复读。纯观察项(R2 起就有、非本轮回归),人设复审时可议是否同样降为纯音频标记。
## 亮点
- G1 三类等待点九次上滑零逐字重播,账目口径(状态句永远照播)一点没伤;G2 的 warning 精确得像档位传感器;G4 的 20→8 连击签名把手感误导真正变成了可读反馈。
- 危机拍这回是「听见刹车再听见人喊」:screech 先到 2.10 秒,danger 震同帧,dango 自动接——SA3 的声音头一回真正参与了叙事节奏。
- 账目依旧分毫不差:rep=12、五全救尾声、h1_echo 的 0.1s、w1_say 组的条件差分,一个数都不带含糊的。
## 一句话裁决
**愿意放行**——G1/G2/G4/G6 四修全部现场坐实且零回潮,完整走心局零叠音零死锁打出 e1(rep=12 分毫不差),arg_muffled/brake_screech 真声入局,radio 可以进 4 人设全员复评;剩下的只有一条 0.16s 竞态毛刺和两条仪器/打磨级建议(P3×3,无 P0/P1/P2)。
---
### 附:产物与证据文件
- 本局:`/home/xsl/SoundGame/web/harness/live/out/radio-20260902145336/`(events.jsonl 796 事件/125 语音段/65 手势、verdicts.json 195 行、transcript.md、mix.webm 30MB 真实混音)
- 关键事件窗:G1/G6 ONAIR 对 186.7-232.3;BRIDGE 对 837.8-859.7;ENDING 对 1588.6-1622.5;G4 六例 670.9/722.5/828.3/1047.0/1079.9/1171.4;G2 warning 187.1/224.1;arg_muffled 964.04+970.54;brake_screech 1432.82(人声 1434.92)
- 引用代码(只读,未改动):`/home/xsl/SoundGame/web/radio/game.js`(G1 `_helpSpokenOnce` L1170、G2 `_tierCue` L1157、G4 L455-463/L577、G6 `_withHelp` L1184、crisis 节点表 L159-166);`/home/xsl/SoundGame/web/engine/haptics.js`(模式表 L35-46)