feat(assets): SA3 音效补齐 radio 11+1 与 dungeon 13源+15pan(token 走 hf-mirror 实测可用)
- 模型 17/17 文件经镜像全量缓存(gated+token,直连本机不通;sfx.md/setup.md/asset-pipeline.md 镜像结论同步更新) - 修复迁移遗留:stable_audio_3/models/ 源码子包被 .gitignore models/ 规则误伤丢失,从上游恢复并加白名单 - radio:arg_muffled/brake_screech 等叙事件落地(接线原有 L111/L154 零改动)+ phone_ring SYN→SA3 升级;dungeon 13 源 A/B 对齐(RMS 偏差 ≤0.3dB)全量同名替换,SYN 原版备份 tools/asset_fix_backup/sa3_ab_20260902/ - 关键玩法语义达标:echo 距离档 0.83<1.43<2.18<2.98s 严格递增;one-shot 真峰值全 ≤-3dBFS(解码回读法) - check_all_assets 8 游戏全绿(radio 254/254、dungeon 303/303);playtest radio 221/dungeon 1610 全绿
This commit is contained in:
@@ -46,6 +46,9 @@
|
||||
|
||||
## 4. 缺失资产清单(SA3 待 HF token,本轮全部跳过、未尝试生成)
|
||||
|
||||
> **已于 2026-09-02 晚全部补产闭环,见本文档 §8**(amb_studio 产出备用未接线;dungeon 28 文件
|
||||
> 为 A/B 替换而非纯缺失——批次 2 曾以 SYN 兜底,见 `web/dungeon/gen/gen_sfx2.py`)。
|
||||
|
||||
**radio(13 件)**:`onair_sting phone_ring line_connect line_drop amb_studio amb_rain_city amb_station amb_kid_room arg_muffled amb_street_rain amb_cab brake_screech tape_static`(15-radio.md §5.2;prompt 草稿在表内,token 就绪后按 gen_rpg_sfx.sh 工艺补产)。
|
||||
|
||||
**dungeon(24 文件 = 13 个 SA3 源 + 11 个 pan 派生)**:`echo_1 echo_2 echo_3 echo_4 stairs_down atk_hit enemy_die mob_step_small mob_step_bug mob_step_heavy`(+各 l/c/r 三份派生)`tel_small tel_bug tel_heavy`(+各 l/r 派生)(16-dungeon.md §9.2;mono 源 → `stereotools`/`pan` 派生工艺同表注)。
|
||||
@@ -65,7 +68,7 @@ radio ogg 构成 = 103+103 双性别 + 29 平铺 NPC + 2 sfx + 4 bgm;dungeon =
|
||||
|
||||
## 6. 遗留问题 / 待办
|
||||
|
||||
1. **SA3 token**:环境未配置(env.d/sfx.sh 无有效 HF token),radio 13 + dungeon 24 件 sfx 待补产(清单见 §4,prompt 均已在设计文档定稿)。
|
||||
1. ~~**SA3 token**:环境未配置(env.d/sfx.sh 无有效 HF token),radio 13 + dungeon 24 件 sfx 待补产(清单见 §4,prompt 均已在设计文档定稿)。~~ **已闭环(2026-09-02 §8)**。
|
||||
2. **人工试听两处**:① radio NPC 带通句可读性抽检(不可读回退未滤波原声,staging 重转即可,管线已支持);② 多音字风险句(15-radio-voice-ids.md 文末注记:h1_dango「嘶」、k1_lullo、d9_face 等;16b:btl_bat「蝠」、unlock_potion「行囊」)。
|
||||
3. **文档笔误待策划改**:15-radio-voice-ids.md 头注「HOST 21 + PROD 82」应为「HOST 29 + PROD 74」(总数 103 不变,不影响任何资产)。
|
||||
4. radio 无「大姐/姑娘」自称合规、gd_* 两级不同句等台词侧设计约束均已在表内落实,开发接线时按 §7.2 看门狗表取用即可。
|
||||
@@ -82,3 +85,81 @@ radio ogg 构成 = 103+103 双性别 + 29 平铺 NPC + 2 sfx + 4 bgm;dungeon =
|
||||
| 期望文本映射 | `web/harness/voice_text.json`(games=8) |
|
||||
| 台账/总账 | `tools/mureka_log.md`(2026-09-01 节);`docs/audio/asset-manifest.md`(radio/dungeon 章节) |
|
||||
| staging(不入库) | `tools/gen_voice_dual_wav/{radio,dungeon}/`、`web/<game>/gen/staging/`、`tools/bgm_post_wav/`、`tools/mureka_out/` |
|
||||
|
||||
## 8. SA3 补产(2026-09-02 晚,HF token 就绪后;§4 缺失清单闭环)
|
||||
|
||||
> 总耗时 ≈ **40 分钟**(18:57–19:38,3 轮 GPU flock 串行生成 + 全部 QC/A-B/文档)。
|
||||
> 模型 `stabilityai/stable-audio-3-small-sfx` 17 文件经 hf-mirror(gated+token)全量下载成功,
|
||||
> 落 `models/hf/hub/models--stabilityai--stable-audio-3-small-sfx/`。生成参数:`--steps 8 --seed 20260902`,
|
||||
> 3 轮 CLI 批量(radio 12 + dungeon 13 + amb_studio 1),原始 wav 在 `web/<game>/gen/staging/sfx_sa3/`(不入库)。
|
||||
|
||||
**环境修复(重要,机器迁移遗留)**:`tools/stable-audio-3/.gitignore` 的 `models/` 规则误伤了
|
||||
源码子包 `stable_audio_3/models/`(factory.py 的依赖,初迁时未入库而丢失,import 直接报
|
||||
ModuleNotFoundError)。已从上游 GitHub(经 ghfast.top 代理,本机直连 GitHub 不通)恢复该子包,
|
||||
并在 .gitignore 追加 `!stable_audio_3/models/` 防复发。CLI 需 `source env.d/sfx.sh`
|
||||
(HF_TOKEN/HF_ENDPOINT),模型已在缓存时加 `HF_HUB_OFFLINE=1` 免网络。
|
||||
|
||||
**工艺(入库脚本 `web/{radio,dungeon}/gen/gen_sfx_sa3.py`,含 `--emit` 打印生成命令)**:
|
||||
SA3 输出为定长 latent 床(radio raw 16.16s / dungeon raw 10.59s,与请求时长无关),按实测事件
|
||||
窗截取(arg_muffled 摔门峰 @5.00s、brake_screech 最强吱咬 @3.91s、tape_static 停带 @3.72s,
|
||||
窗切点 50ms 缓出);one-shot 去直流 + 8ms cos² 淡化 + 峰值定档;amb 床只去直流不淡化
|
||||
(游戏层 0.4s 重触发重叠掩接缝),RMS −26dBFS 定档 + 峰值帽 −8(escape amb 床先例);
|
||||
dungeon 候选按在役 SYN 版解码 RMS 同口径对齐(保混音参数,峰值帽 −4 不变;垫后计算避免稀释偏差;
|
||||
派生 l/r/c 从对齐后基准复制,与 SYN 派生逐声道振幅一致)。编码 ogg q4 + m4a 128k
|
||||
(hp30 + 垫 60/120ms),解码回读 QC 全过:逐声道真峰值 ≤ −3dBFS、|直流| ≤ 0.001、
|
||||
超限降增益 + 首轮重编 18kHz 低通(本轮无一触发补偿);phone_ring 另验循环边界 ≤ −60dBFS。
|
||||
|
||||
### 8a. radio(13 件 = 缺失 11 + phone_ring 替换 + amb_studio 备用;11+替换件已接线)
|
||||
|
||||
| id | 时长s | ogg峰dBFS | m4a峰dBFS | RMS | 结论 |
|
||||
|---|---|---|---|---|---|
|
||||
| onair_sting | 2.14 | −4.10 | −4.14 | −19.0 | 补产落地(台标 sting,k1 前 INTRO 已接线) |
|
||||
| phone_ring | 5.20 | −4.00 | −3.76 | −30.5 | **替换 SYN**(A/B:真电话铃双击响明显更优;循环周期 5.2s 烘进文件、边界静音 ≤−60dBFS,游戏侧 `_ringSrc` loop 接口零改动,原 SYN 备份在 `tools/asset_fix_backup/sa3_ab_20260902/radio/`) |
|
||||
| line_connect | 0.78 | −7.30 | −7.11 | −33.6 | 补产落地(接听咔哒,subtle 档 −7) |
|
||||
| line_drop | 2.23 | −7.27 | −7.51 | −31.1 | 补产落地(挂断+忙音) |
|
||||
| amb_rain_city | 16.16 | −8.77 | −8.58 | −26.2 | 补产落地(C1 老周侧 amb 床) |
|
||||
| amb_station | 16.16 | −7.66 | −7.73 | −34.3 | 补产落地(C2 小鹿侧;峰值帽导致偏静,深夜车站符合设计) |
|
||||
| amb_kid_room | 16.16 | −10.52 | −10.70 | −37.2 | 补产落地(C3 糖糖侧;刻意安静,反衬 arg_muffled 线索) |
|
||||
| arg_muffled | 4.58 | −8.44 | −8.74 | −33.9 | 补产落地(**C3 埋线索**:k1_b 已接线 ×2 播,事件窗含摔门 @raw 5.0s) |
|
||||
| amb_street_rain | 16.16 | −8.14 | −7.76 | −27.2 | 补产落地(C4 陈姐侧) |
|
||||
| amb_cab | 16.16 | −11.31 | −11.20 | −26.4 | 补产落地(C5 老韩侧,引擎+雨刷) |
|
||||
| brake_screech | 2.38 | −4.75 | −5.01 | −22.9 | 补产落地(**C5 危机拍**:h1_danger 已接线 preMs=2000 前置,最强吱咬事件窗 2.2s) |
|
||||
| tape_static | 3.53 | −5.70 | −5.40 | −33.4 | 补产落地(p9 直面留言机电流) |
|
||||
| amb_studio | 10.00 | −14.56 | −14.59 | −27.1 | 备用(文档 §5.2 有、game.js 未接线——直播间底噪由 bgm/onair 承担;不改代码) |
|
||||
|
||||
### 8b. dungeon(28 文件 = 13 SA3 源 + 15 pan 派生,全部同名替换在役 SYN 兜底)
|
||||
|
||||
| 源 id | SA3 时长s (SYN) | ogg峰 (SYN峰) | SA3 RMS (SYN RMS) | 结论 |
|
||||
|---|---|---|---|---|
|
||||
| echo_1 | 0.83 (0.58) | −11.1 (−5.5) | −28.4 (−28.3) | 替换;**距离档递增校验通过** 0.83<1.43<2.18<2.98 |
|
||||
| echo_2 | 1.43 (1.08) | −4.3 (−4.4) | −29.7 (−27.3) | 替换(峰值型瞬态,RMS 对齐受峰值帽 −1~2dB 内) |
|
||||
| echo_3 | 2.18 (1.68) | −14.0 (−4.2) | −28.5 (−28.4) | 替换 |
|
||||
| echo_4 | 2.98 (2.38) | −14.1 (−4.2) | −26.9 (−26.2) | 替换 |
|
||||
| stairs_down | 3.72 (1.88) | −4.0 (−4.6) | −25.1 (−24.1) | 替换(真实下行金属梯+窟内混响) |
|
||||
| atk_hit | 0.87 (0.48) | −4.5 (−4.6) | −25.8 (−21.4) | 替换(甲壳钝响峰值对齐,RMS −4.4dB 为峰值帽所致) |
|
||||
| enemy_die | 1.88 (1.08) | −3.6 (−4.0) | −21.5 (−19.8) | 替换 |
|
||||
| mob_step_small | 0.63 (0.42) | −7.2 (−4.4) | −27.1 (−27.0) | 替换(+_l/_c/_r 派生 3 文件) |
|
||||
| mob_step_bug | 0.73 (0.48) | −4.3 (−3.7) | −22.6 (−20.7) | 替换(+派生 3;虫肢咔嗒质感) |
|
||||
| mob_step_heavy | 0.83 (0.58) | −4.4 (−4.3) | −22.6 (−20.8) | 替换(+派生 3) |
|
||||
| tel_small | 1.18 (0.78) | −3.5 (−3.6) | −19.5 (−17.6) | 替换(+_l/_r 派生 2) |
|
||||
| tel_bug | 1.28 (0.78) | −5.3 (−4.7) | −23.1 (−23.0) | 替换(+派生 2) |
|
||||
| tel_heavy | 1.48 (1.08) | −3.5 (−4.3) | −17.4 (−12.9) | 替换(+派生 2;SYN 低吼 RMS −12.9 受峰值帽只对齐到 −17.4,峰值 −3.5 保留冲击力) |
|
||||
|
||||
**A/B 结论(默认「质量明显更好才替换」)**:13 源全部替换。依据:① 真实声源质感(石壁反射/
|
||||
虫甲/金属梯)对合成正弦+噪声团,听感代差明确,且 16-dungeon.md §9.2 本就以 SA3 为正选、SYN 仅为
|
||||
无 token 兜底(gen_sfx2.py 头注「日后补产 SA3 版,直接覆盖同名文件」);② 语义可测项全部达标——
|
||||
echo 距离档时长/暗度严格递增(回声尾长=墙距是核心玩法信息)、脚步/前摇/命中时长落在玩法窗口
|
||||
(mob_step ≤0.83s、tel 1.18-1.48s、atk_hit 0.87s)、响度按在役 SYN 解码 RMS 对齐(混音零改动)。
|
||||
SYN 版全部备份于 `tools/asset_fix_backup/sa3_ab_20260902/dungeon/`,可一键回退。
|
||||
|
||||
### 8c. 终检与回归
|
||||
|
||||
- `tools/check_all_assets.py`:8 游戏全绿——radio **254/254**(235 voice + 15 sfx + 4 bgm)、
|
||||
dungeon **303/303**(250 voice + 49 sfx + 4 bgm),0 字节/解码失败/配对缺失均为 0。
|
||||
- `web/radio/test/playtest.mjs`:**221 断言全绿**(未改任何代码;静态审计「sfx 缺失」变 0——
|
||||
STABLE_AUDIO_PENDING 清单闭环;arg_muffled ×2 / brake_screech 前置 2s 触发断言原本就有)。
|
||||
- `web/dungeon/test/playtest.mjs`:**1610 断言全绿**(同名替换游戏层零改动)。
|
||||
- 接线复核:arg_muffled=game.js L111(k1_b `sfx` + `sfxEcho` atMs 6500)、brake_screech=L154
|
||||
(h1_danger `danger:true, preMs:2000, sfx`),R1 报告属实,本轮零代码改动。
|
||||
- key/token 未入任何入库文件;GPU 全程 flock 串行(3 轮);未动 web/engine/、web/harness/live/**、
|
||||
8123/8124/8001 服务。
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
# 《不眠频率》R2 修复验证轮 · 全拟真试玩报告 — 老墨与他闺女墨墨
|
||||
|
||||
## 基本信息
|
||||
|
||||
同一台"手机"两个用户(live harness:真 chromium + SenseVoice ASR 听游戏实况,非 mock)。本轮为 **R1 五项修复(F1-F5)的现场验证轮**:R1 修了没有、有没有修出新问题。
|
||||
|
||||
**局 A(老墨·新手主线,走心局)**
|
||||
- 身份:45 岁电台制作人,认真听完关键句再动手,全程左滑走心,故意在链末等待态做无效手势复现 R1 头号坑。
|
||||
- 设置:`voice=male, speed=1.0, bgm=1.0, guide=full`
|
||||
- 手势:65 个(tap 53 / 左滑 9 / 上滑 2 / 右滑 1),语音 106 段
|
||||
- 结局:**e1「天亮之前」**(rep=12 与设计表分毫不差),尾声五人全救版 ep_*_ok 逐条点名
|
||||
- 报错:非资产类 console.error = 0;**零叠音、零死锁、零游戏自残截断**
|
||||
|
||||
**局 B(墨墨·急性子压力,负线)**
|
||||
- 身份:19 岁女儿,1.7 倍速女声,抢答乱戳,走克制/回避路线,专测断点续玩与 1.7x 韧性。
|
||||
- 设置:`voice=female, speed=1.7(数值), bgm=1.0, guide=standard`
|
||||
- 手势:57 个(tap 42 / 右滑 6 / 左滑 4 / 上滑 1 / 下滑 2 / 长按 1 / 双击 1),语音 102 段
|
||||
- 结局:**e3「一个人的频道」**(rep=0 + p9 左滑直面;R1 现场没打出的第三个结局),尾声五人全错过版 ep_*_no
|
||||
- 报错:非资产类 console.error = 0;3 处提前截断**全部可归因到玩家自己的 tap**(两处引导句、一处 INTRO 链中段句,均属可跳范围)
|
||||
|
||||
**加测(会话 C,只为一件事)**:利用局 B 存档再续玩一次,验证 F4 的"跳句锁在首句播完后释放"。
|
||||
|
||||
---
|
||||
|
||||
## R1→R2 五项修复 · 逐条现场验证结论
|
||||
|
||||
> t= 均为该局"解锁后秒数"(events 时基 ta)。判"修好"标准:R1 的复现步骤做出同样操作,坏结果不再出现,且修复后的新行为被事件/音频双重证据锁定。
|
||||
|
||||
### F1 链末等待态无效手势吞看门狗 → **修好**(证据最硬的一项)
|
||||
- R1 复现步骤:一句话播完进链末等待 → 做一个无效手势 → 此后"还在吗"永不来(34.2s 死寂)。
|
||||
- 局 A t=354.7 我在 z1_ring_in 播完后的链末等待里**故意左滑**:[10]+[60,40,60] error 震 + gd_invalid(full 档同局一次),**撒手后 t=380.2 gd_continue 准点回来(=手势后 25.5s),t=405.2 gd_again 再+25.0s**——两级全来了,R1 的死寂没有复现。
|
||||
- 局 B 同款压到 standard 档:t=397.3 我在 k1_b **播放中**左滑(无效)→ error 震 → gd_continue t=410.8(=+13.0s)、gd_again t=427.8(=+30.0s),**重挂基准就是手势那一刻,分秒不差**。
|
||||
- 佐证:局 A 我中途挂机 2.5 分钟,t=198.2/223.2 两级也准点(等待态基线本身没坏);RING 态无效分支、ASK 态无效分支、长按分支的重挂在代码里各有落点(game.js L383/L411/L458/L581,只读参考未改动)。
|
||||
- **结论:修好。无效手势"零静默"承诺重新闭环。**
|
||||
|
||||
### F2 rep=0 档播「有点砸了」账目不符 → **修好**
|
||||
- 局 A t=102.0 第一通铃前上滑听状态,实测 rep_low:heard「今晚的口碑还没力气」,sim **0.7368 OK**——harness 登记的 expected 已是**「今晚的口碑,还没立起来。」**,若游戏仍在播旧词「有点砸了」,相似度不可能到 0.74。"还没力气"是 ASR 对"还没立起来"的同音幻听(≤6 字短句重灾区口径,见下)。
|
||||
- 旁证:R2 离线压力转写里 rep_low 全部为「还没立起来」(transcript-stress.md 9 处)。
|
||||
- **结论:修好。0 档账目与文案对齐。**
|
||||
|
||||
### F3 RING 态铃声静默 → **修好**(接听即停也验了)
|
||||
- 资产层:`audio/sfx/phone_ring.ogg` 预载 **fetch 200**(R1 是 404,缺 12 件 SFX 之首)。
|
||||
- 行为层:局 A RING 入口 t=29.65 事件 `start sid=2 layer=sfx dur=5.2 loop=true`——程序合成铃声循环垫起播。
|
||||
- 可闻层:ASR 听窗 t=29.6-39.7 与 42.4-54.7 两段判 SFX_BGM_ONLY(非语音声持续存在);对 mix.webm 的 30-39s 窗做 ffmpeg astats:**Peak -1.5 dB / RMS -15.4 dB**(R1 同窗口是数字静默)——铃声是真的听得到了。
|
||||
- 接听即停:我 t=169.0 单击接听 → `stop sid=2` t=169.4 → 通话首句 z1_ring_in t=169.5 起播——**铃声停得比人声早,零叠音**。
|
||||
- **结论:修好。「只响一下短震然后静默 10 秒」的 R1 体验不复存在。**
|
||||
|
||||
### F4 断点续玩恢复链首句可被单击跳掉 → **修好**(连"锁的释放"也验了)
|
||||
- 局 B 重进命中存档询问(sys_continue_ask t=0.1,局 A 的存档从 localStorage 活了过来)。t=19.5 单击"继续上次"→ 恢复链首句 e1_a t=20.0 起播;**我在 1.5s 处(t=21.5)单击 → 只有 [20] 确认震,首句足时播完**(3.0s = 声明 5.04/1.7 倍速),R1"一戳就把恢复链戳乱"没有复现。
|
||||
- 加测(会话 C):再续玩一次,首句 e3_a 播放中 tap 被吞;**同一节拍的 tap 紧接着把第二句 e3_b 在 0.2s 处跳掉**(事件 t=6.6→6.8 kill)——跳句锁只护恢复链第一句,播完即释放,不会变成"永远不可跳"。
|
||||
- **结论:修好,且释放行为正确。**
|
||||
|
||||
### F5 链末句无跳过保护 → **修好**(保护范围比 R1 建议更彻底)
|
||||
- R1 的痛:k1_trutho 尾巴「会一起给我切蛋糕吗?」等点题句被抢跑吃掉。
|
||||
- 现场:局 A k1_trutho(11s 长句)完整播出;d9_facee「但空着的那一秒,你说满了」**两局两次都完整落地**(局 A 5.28s 足时;局 B 3.69s = 6.24/1.7 足时)。句中/句尾单击一律只给 [20]:z1_sdone t=597.8(句尾前 0.5s)、k1_ask t=1320.7、k1_truth t=1398.0、h1_talke t=1794.8、局 B g9_in t=713.6(auto 链直入抉择的尾句)——**全部无效化,无一例外**。
|
||||
- 没有矫枉过正:链中段句子照常可跳(w1_say t=1559.8、h1_danger t=1784.3、e1_a t=1862.8 三处被我跳掉,均按设计生效)。
|
||||
- **结论:修好。尾句保护 + 中段跳句自由两头都在。**
|
||||
|
||||
### 整体回归
|
||||
- 两局完整打到结局:**e1(rep=12)与 e3(rep=0,新结局)**。账目逐点核对:局 A p1L+1/p2L+2/p3L+2/p4R+1/p5L+1/p6L+2/p7L+2/p8L+1=12;局 B 负线 -1→0,跨档播报只在 3→5 时出现一次(rep_high t=1179.6),低→低不播——**账没多也没少**。
|
||||
- 条件差分照常:局 A heardArgument 命中(w1_say 组 t=1556.7)、bond_zhou=1 时 h1_echo t=1797.5 在 h1_talke 后 0.1s 接入;局 B bond_zhou=0 时 h1_echo **确实缺席**(h1_stope t=708.8 → 直接幕间)——回响不撒谎,两个方向都验了。
|
||||
- 危机拍自动流:danger 长震 [25,40,25,40,25] t=1780.9 → 2.1s 前置 → h1_danger → 自动接 dango/talke,不等单击(我跳了 danger 中段,链条照走完)。
|
||||
- 1.7x 压力下菜单开合(结算态 swipedown 打断结局复播 → 再 swipedown 无缝从头复播)、双击重听、长按 boost、无效手势零静默,全部状态正确。
|
||||
- **零叠音(A 106 段 / B 102 段,vstart 全部晚于上一 vend)、零死锁、非资产 console.error=0。**
|
||||
|
||||
---
|
||||
|
||||
## 局 A 体验叙述(老墨,第一人称)
|
||||
|
||||
解锁那一指下去,先听见「新的夜晚,开始了」和 full 档专属的操作口令,然后台标口播——**开局 t=0.011s 预载清单里 phone_ring 直接 200**,我特地在第一通铃前竖起耳朵:t=29.7 起,"铃——铃——"的双音循环垫真的在响,中间还留着电话铃该有的那口气口。10 秒和 25 秒的两句导播提醒照旧准点,但这次它们是叠在铃声上的提醒,不是替铃声还债。上滑听状态,导播说「今晚的口碑,还没立起来」——新词,账对(零起步就该这么说,R1 那句"有点砸了"冤枉人)。
|
||||
|
||||
第一通老周,我按老墨的慢性子听完就点。播完 z1_ring_in 我故意使坏:链末等待里来了个左滑——error 震,导播说了句「这个手势,直播间里用不上」,然后我把手拿开掐表:25.5 秒,"单击屏幕,继续"来了;再 25 秒,"还在吗"也来了。R1 我闺女踩的那个 34 秒深坑,填平了。
|
||||
|
||||
后面一路走心:老歌、原地陪等、小鹿上车、糖糖我问了她(mid-prompt 右滑照旧缓存生效)、真话、带话、陪聊。老韩的危机拍这回带着 danger 长震和 2 秒前置来的,dango 一气呵成;挂电话前 t=1797.5 老韩那句「头通电话那位大爷……这城市的夜,是接着的」又是 0.1s 不差地接进来。签收 p9 左滑,「师父,三年了」足时播完,点题句「但空着的那一秒,你说满了」这回一个字没少——R1 我三次吃掉别人尾巴,这次轮到我护着它了。e1 收播,导播账本五个人全救,rep=12,分毫不差。结尾我又手贱跳了 e1_a 一半——那是我自己的手,重听双击就还回来了。
|
||||
|
||||
## 局 B 体验叙述(墨墨,第一人称)
|
||||
|
||||
我抢过手机就看见「检测到你的夜班记录」——哥的存档。这次我学乖了听完规则:单击继续。结果它把我扔回哥的 e1 结局链,我不服,首句播到 1.5 秒就戳——**戳不动**。行,是护着哥的句子。播完第二句我就跳了(锁只锁一句,讲武德)。我不想了,狂戳穿越结局链,结算画面点一下,新的夜晚 1.7 倍速开跑。
|
||||
|
||||
这把我全走渣男路线:老周问路牌、转接派出所——「说不清,我真是说不清了」和导播那句指名道姓的「这通砸了」一样不少;小鹿还她自由;糖糖我直接哄睡(结算句照样点我「你没听见她在怕什么」);陈姐劝回家;老韩进服务区「单子黄了」。没有陪过任何人的夜,老韩没替老周谢我——**回响这东西不播就是不播,账清楚**。p9 我倒是大着胆子左滑了一次:e3「一个人的频道也是频道」——这是 R1 我没见过的结局,憋得跟 e4 不一样,是一种"没救成但说出口了"的体面。尾声五个人全是错过版。
|
||||
|
||||
1.7 倍速里我照旧乱来:k1_b 播放中左滑(error 震,13 秒后"还在吗"准点来)、空点乱戳(只有震)、开菜单又关(结局链从头无缝复播)、双击重听、长按 boost。唯一让我嘀咕的是糖糖开口的前两句(「喂?有人吗?」)声音跟同通话后头的不像一个源——后来查了是那两句没有男声部资产、回退到了中性版,能听,但同一通电话里换了个人捏嗓子。
|
||||
|
||||
---
|
||||
|
||||
## 测量局限与证据口径(先说清楚)
|
||||
|
||||
- 1.7x 女声的 ASR 是重灾区:局 B 145 行听写里 MISMATCH 率明显偏高(最低把 b_rule 残句听成 0.08)。**凡 events 层足时播放、仅转写不像的,一律不算游戏问题**;局 B 的"提前截断"已按 dur/1.7 重审,真实截断仅 3 处且全为玩家 tap。
|
||||
- 局 A 与加测会话按 1.0 速审计:4 处提前截断(p6 复播句/w1_say/h1_danger/e1_a)全部为我的 mid-prompt 缓存滑或链中段跳句,**0 处游戏自残**。
|
||||
- 采信引擎级证据的两类口径同 R1:vend 提前于 dur/speed(TRUNCATED)、应答窗口零事件(SILENCE)。
|
||||
- t= 均为解锁后秒数(events ta),与 ASR 转写时间轴有约 5 秒固定偏移,引用转写只取文本与 similarity。
|
||||
- 仪器侧一次怪癖:局 A t=650-698 有两个 harness 发出的 tap 未抵达页面(curl 响应被脚本丢弃无法溯源),游戏无责(页面零事件零震动,符合"没收到就是没收到");此后所有手势均校验响应。
|
||||
|
||||
## 问题清单
|
||||
|
||||
### P0(卡死/死锁/状态混乱/游戏自残截断)
|
||||
|
||||
无。两局加测共 210+ 段语音零叠音、零死锁;TRUNCATED 全清单 7 处(A4/B3)逐条归因为玩家 tap。
|
||||
|
||||
### P1(体验断裂)
|
||||
|
||||
无。R1 唯一的 P1(F1)已修复并双档位复验。
|
||||
|
||||
### P2(不适/设计意图缺席)
|
||||
|
||||
无新增。R1 的 P2-1(铃声)/P2-3(续玩单击陷阱)/P2-4(尾句)已由 F3/F4/F5 修复;R1 P2-2(arg_muffled/brake_screech 及环境音)仍为 SA3 资产缺口(V3,等 HF token),本轮维持已知遗留,不重复计数。
|
||||
|
||||
### P3(建议,6 条)
|
||||
|
||||
1. **rep_low 的 warning 震仍未出现**(R1 P3-3 遗留):局 A t=99.6-102.0 RING 上滑听 rep_low,只有上滑自身的 [10],无附加警示震。代码注释称 rep_low 附 warning 震——要么补齐,要么删注释。
|
||||
2. **k1_a/k1_b 缺 male 声部资产,静默回退中性路径**(新发现):局 A/局 B 糖糖通前两句 fetch `audio/voice/male/k1_a.*` 全 404 → 回退 `audio/voice/k1_a.ogg` 200 播出。功能无损(回退链路工作正常),但同一通电话内可能存在声线跳变,建议补齐渲染或确认音色衔接。
|
||||
3. **一次性的提示句复播晚点**:局 A p2 首次复播 t=740.1 比基准晚 ~7.6s(其后所有复播/看门狗首拍均精确到 ±0.2s:1281.1/1383.0/1550.4 等)。仅一次观测,建议加断言盯一下。
|
||||
4. **ASK 空点单击的确认震手感**(R1 P3-1 遗留):p9 后空点两连戳各给一记 [20],像"点上了"实则什么都没发生。
|
||||
5. **harness:POST /gesture 响应未校验时会静默丢手势**(仪器侧):建议脚本侧始终检查 `{"ok":true}`;长按固定 600ms 仍只能体验 ~0.1s boost(遗留工具局限)。
|
||||
6. **mid-prompt 滑动生效会掐掉选项句尾巴**(设计备注,对应 R1 V1 观察):局 A p6 复播 6.23/8.64 处被缓存滑终止立即生效——"零插播"契约的一部分,玩家侧无感知损失,但与"选项句听全文"的期望有张力,人设复审时可议。
|
||||
|
||||
## 亮点(让我愿意玩下去的东西)
|
||||
|
||||
- **五项修复全是真修**:F1 的看门狗重挂以手势时刻为基准、两种 guide 档位四组实测分秒不差;F3 连"接听即停早于人声"都做对了;F4 连锁的释放都验得出;F5 护尾不废跳。修得干净,没有修出新坑。
|
||||
- **账目依旧真实得可怕**:rep 12/0 两条线与设计表吻合;跨档播报只在真跨档时出现;h1_echo 有 bond 则来、无 bond 则绝不剧透;尾声全 ok/全 no 两版都亲耳听过。
|
||||
- **e3 是个新收获**:「一个人的频道也是频道」——没救成但把话说出口的夜班,和 e4 的「明晚再说吧」是两种不同的难受。四结局现场已见其三(e1/e3/e4)。
|
||||
- **1.7 倍速下的底盘纹丝不动**:乱序手势 57 连发、菜单打断恢复、双击重听、看门狗 13/30 秒准点,零状态错乱。
|
||||
- 铃声终于响了。这个只有耳朵的世界,的第一声"叮铃",等了一整个 R1。
|
||||
|
||||
## 一句话裁决
|
||||
|
||||
**愿意**——五项修复逐一现场坐实、两局零死锁打出 e1/e3、账目分毫不差,radio 可以进 R3 全员复评;剩下的都是资产位(SA3 的 13 件声音)和打磨键,我等着把铃声、争吵声和刹车声凑齐的那班夜车。
|
||||
|
||||
---
|
||||
|
||||
### 附:产物与证据文件
|
||||
|
||||
- 局 A:`/home/xsl/SoundGame/web/harness/live/out/radio-20260902103345/`(events.jsonl 106 语音段/65 手势、verdicts.json、transcript.md、mix.webm)
|
||||
- 局 B:`/home/xsl/SoundGame/web/harness/live/out/radio-20260902110919/`(events.jsonl 102 语音段/57 手势)
|
||||
- 加测(F4 释放):`/home/xsl/SoundGame/web/harness/live/out/radio-20260902112548/`
|
||||
- 引用代码(只读,未改动):`/home/xsl/SoundGame/web/radio/game.js`(F1 重挂 L364/L383/L411/L458/L581、F3 铃声 L755-783、F4 跳句锁 L1024-1027、F5 尾句判定 L495-511、看门狗常量 L227-234)
|
||||
- 铃声响度证据:局 A mix.webm 30-39s 窗,ffmpeg astats Peak -1.5 dB / RMS -15.4 dB
|
||||
- 离线旁证:`/home/xsl/SoundGame/research/new8/radio/round2/transcript-stress.md`(rep_low 新词 9 处)
|
||||
Reference in New Issue
Block a user