Files
SoundGame/research/new8/batch2-assets-report.md
T
xsl 31372615b2 feat(new8/batch2): 《深海回音》abyss +《雨夜专案》detective 全套交付(多agent流水线:策划→资产→开发→测试→真资产复跑)
- abyss:game.js 242 断言全绿(剧本A-F六路径/氧气门三形态/sonarGate仲裁/结算死窗/双轨看门狗/radio 8项修复继承);资产 148句+11key变体(电台滤波带内能量47-62%→69-80%)
- detective:game.js 265 断言真资产下全绿(矩阵不变式独立重算/指证全路径/评级12组注入/VERDICT死窗/二周目变体);真资产复跑回炉3处实现修复(无进展轨墙钟化/菜单暂停记账/停止播报真停声——mock时长掩盖的正确性bug)
- 资产:TTS 539条×2格式、Mureka 7首 $0.21(累计$1.08/$2.00)、SYN12+SA3 19件(QC抓出1例AAC过冲并修复)、封面×2、check_all_assets 10游戏全绿(abyss 298/298、detective 279/279)
- 平台接线:大厅双卡片、BUCKETS 增 abyss/detective 桶(H4 断言更新 10 游戏)、voice_text.json 10游戏991句
- 回归:14 套件全绿(10 playtest+guide+engine-voice+engine-input+api-smoke 12/12)
- 设计偏差登记:abyss 7条/detective 9条(全为设计内部冲突按承诺清单/归因真话律取优)
2026-09-10 01:40:31 +08:00

12 KiB
Raw Blame History

批次 2 资产报告:abyss《深海回音》+ detective《雨夜专案》

音频资产管线 agent 产出 · 2026-09-10 · 覆盖任务书 A(语音)/ B(BGM)/ C(音效)/ D(封面)/ E(登记)。 总耗时 ≈ 55 分钟(00:25–01:20,含 3 轮 GPU flock 串行生成、7 个 Mureka 任务、全部 QC 与文档; Mureka 与 GPU TTS 并行推进,互不占锁——前者纯 API)。

1. 语音(TTS,GPU flock 串行)

项 abyss detective
台词句数 148(双性别 127 含 key 11 对 + NPC 平铺 21) 158(旁白 106 含 key 10 对 + NPC 平铺 52)
生成文件 (116 主 + 11 key)×2 + 21 NPC = 275 条 ×2 格式 = 550 文件 (96 主 + 10 key)×2 + 52 NPC = 264 条 ×2 格式 = 528 文件
speaker DIVER 玩家=Uncle_Fu/Serena + DECK 调度=Dylan/Vivian(VOICE_SPK 逐句覆盖,同性别双音色,radio HOST/PROD 同型:同场景对话两者永不同 speaker) 旁白全表 Uncle_Fu/Serena,单一 instruct 常量
NPC 平铺 小舟 Serena / 老白 Uncle_Fu / 陈医官 Vivian / 高船长 Eric(4 音色,电台滤波见下) 老葛 Eric / 小顺 Dylan / 周先生 Uncle_Fu / 温太太 Vivian / 秦法医 Serena(5 音色满配,不加滤波——18b 头注)
--check ALL OK(无时长离群/短句) ALL OK
  • 台词表进入 tools/gen_voice_dual.py(新增 abyss/detective + SPEAKERS/VOICE_SPK["abyss"]/NPCS/NPC_BANDPASS["abyss"]/KEY_LINES 各 11/10 对),两表一致闭环校验:一次性脚本(/tmp/verify_batch2.py,未入库)重解析 17b/18b 两份 voice-ids 文档,与脚本内三张表(主表/key/NPC)逐字 diff PASS——148/158 句、key 11/10 对、NPC 21/52 全对齐,账目核对(音频条数 275/264)与文档合计一致。
  • key 变体落 voice/<gender>/key/<id>.*(radio 批次 1 既有引擎约定:web/engine/audio.js 候选链前置 voice/<gender>/key/<id>;文档中 <id>_k 是逻辑 id,落盘无后缀进 key/ 子目录)。
  • abyss 电台滤波(17-abyss.md §5.3):convert 转码按船员逐档 highpass+lowpass+轻压缩(小舟 420-3200 / 老白 350-3000 / 陈医官 400-3100 / 高船长 300-2800 Hz,均 acompressor threshold=-20dB ratio=3);已验证生效:带内能量 47-62%→69-80%,>3.4kHz 高频占比 7.1%(最窄档 gao_a)vs 未滤波 DECK 44.8%,时长与 staging 完全一致;未滤波原声保留在 tools/gen_voice_dual_wav/abyss/npc/(不入库)可重滤/回退。DIVER/DECK 不滤波(母船级音质)。
  • extract_voice_text.py 已刷新 web/harness/voice_text.json:games=10,lines=991,key_variants=185。

文档内矛盾检查(未停下项,均登记不阻塞管线):

  1. 17b 头注「双性别组……126 句」与文末合计「双性别 127 句(30+97)」不符——逐行表实数 127(30 DIVER + 97 DECK,脚本与文档逐行一致),头注笔误,建议策划改 126→127(不影响任何资产)。
  2. 17 号文档 §7.3 写 key 变体落 voice/<gender>/<id>_k.*,与引擎实现(voice/<gender>/key/<id>,audio.js L365-366)及批次 1 先例/任务书口径不一致——按引擎约定落盘(零代码改动铁律),17 号文档该句待策划改写。
  3. abyss key 措辞用「左箭头/右箭头/上箭头/下箭头」(17b 原文),dungeon 用「左方向键」——两文档各自定稿措辞,照抄不改写。

2. BGM(Mureka API)

7 首全部一次成功,无重试;总花费 $0.21 ≤ $0.30(预算线),项目累计 $1.08/$2.00;台账见 tools/mureka_log.md 2026-09-09「批次 2」节。

曲目 task id 选用 choice 候选时长 响度
abyss deck 160001236664321 候选 0(160001381367809) 192.1 / 201.1s I=-20
abyss dive 160001429798913 候选 0(160001536622595) 179.8 / 210.6s I=-20
abyss comms 160001576402945 候选 1(160001689714693) 213.7 / 168.7s I=-20
abyss ending 160001717043203 候选 0(160001815478273) 191.4 / 211.1s I=-20
detective menu 160001918435329 候选 1 232.3 / 219.8s I=-20(18 号 §8.1 明确)
detective board 160002065039361 候选 0 216.8 / 233.6s I=-20
detective verdict 160002209873922 候选 1 240.0 / 223.7s I=-20
  • 英文 prompt 从 17 号 §5.1 / 18 号 §8.1 表格逐字照抄;选用原则同批次 1(拿不准选时长更接近 90s 的候选)。
  • 后处理(脚本入库 web/{abyss,detective}/gen/gen_bgm.sh):首个强 onset(silenceremove -35dB)→ 93s 裁剪 → 首尾 3s acrossfade(tri) 无缝循环 → loudnorm(TP=-2/LRA=11)→ 44.1kHz → ogg q3 + m4a 128k。成品全部 90.00s,mean -20.2 ~ -21.9dB(与在库 BGM 同量级)。
  • 响度裁定:abyss 4 首全部 I=-20——MENU 复用 deck 曲、低响度淡入由游戏层 gain 控制(§2.1),无独立 menu pad 曲,radio menu -24 先例不适用;detective 3 首按 18 号 §8.1 明确 -20。雨声底按设计烤进 detective 曲目(省第三声流)。无节奏关键曲目,未跑 bpm_precise。
  • flac 原件存 tools/mureka_out/{abyss,detective}-*/(不入库)。

3. 音效(SYN 程序合成 + SA3 直生成——本批 SA3 token 就绪,无缺失清单)

3a. SYN(web/<game>/gen/gen_sfx.py,入库可复现)

  • abyss 6 件:sonar_ping(1.4→0.9kHz chirp 220ms,-6dBFS 设计指定电平,回波家族统一音头)、pipe_knock(三短三长三短固定节拍金属敲击,节拍精确可复现/断言可数)、link_beep(双音上行 0.3s)、ascent_chime(上行三音琶音 0.4s)、ui_confirm ui_menu(全局先例同款)。
  • detective 6 件:签名 sig_shun(布掸子两拍)/sig_wen(门环二连击)/sig_fore(翻页+钢笔划线)、contra_hit(小二度金属相击+盖章尾,全游戏最强确认音 -4dBFS)、contra_miss(钝木鱼,非 error 音色 -8dBFS)、turn_tick(880Hz 木鱼族,dungeon 配方自存一份)。
  • QC(解码回读法,全部通过):逐声道真峰值 ≤ -3dBFS、|直流| ≤ 0.001。铁律首轮即抓出一例真超标:abyss link_beep.m4a AAC 过冲实测 -2.82dBFS(纯弦 MDCT 过冲坑,asset-pipeline.md 有案)——两脚本 encode() 升级为迭代补偿工艺(超限按实测补 volume + 直流预减,dungeon 先例),修复后 -3.67dBFS。

3b. SA3(web/<game>/gen/gen_sfx_sa3.py,--emit 生成 + 后处理入库)

seed 20260909,steps 8,模型已缓存走 HF_HUB_OFFLINE=1;raw 为定长 latent 床(abyss 18.02s / detective 15.05s),one-shot 按活动窗自然修剪(maxs 帽),amb 床整段保留。

abyss id 时长s ogg峰 RMS 结论
echo_metal_l / _r 2.76 -4.93 -24.5 预 pan 立体声:mono 下混 + ffmpeg pan 派生,能量只在目标声道(极性断言),dungeon side_* 工艺复用(引擎无运行时 pan)
echo_debris 2.78 -7.05 -24.5 碎石回波(D2)
echo_groan 4.42 -5.82 -25.3 船体呻吟(D3 预警/D4,≈设计 4s)
static_burst 2.58 -8.41 -24.5 通讯静电(z1_a 垫)
amb_deep / amb_deck / breath_loop 18.02 -12.1/-7.3/-8.2 -26.8/-29.7/-28.8 amb 床只去直流不淡化(游戏层 buffer.loop,radio/escape 先例),RMS -26 + 峰值帽 -8
spark_flash 2.24 -4.13 -23.7 D2 危机拍(danger 同窗)
valve_close 2.35 -5.80 -25.4 p4 左 payoff
landslide 5.37 -5.00 -22.9 D4 危机拍(前置渐强)
surf_splash 2.33 -7.40 -27.1 每潜出水
bell_toll 2.79 -4.72 -26.4 p9 左 payoff
detective id 时长s ogg峰 RMS 结论
paper_turn 1.08 -7.20 -31.7 条目切换内容反馈
sig_ge / sig_zhou / sig_scene 0.78 / 1.08 / 1.28 -5.8~-6.8 -29.8~-35.1 证人签名 earcon;0.78-1.28s 超出文档 0.3-0.5s 指引(两步+伞抖水类内容下限,见 §6 遗留)
gavel 1.35 -3.69 -33.6 裁决仪式拍
rain_swell 7.18 -10.77 -26.7 认罪链垫(≈设计 6s + 垫音;-10dBFS 压在 bgm/verdict 下)
  • m4a 峰值全部同过(-3.05 ~ -10.25dBFS),SA3 侧超限自动补偿未触发;|直流| 全部 ≤ 0.0001。

4. 封面(D)

web/{abyss,detective}/gen/gen_cover.py(PIL,入库可复现,系统 python3 与 .venv-tts 均有 PIL 12.3.0)→ web/<game>/cover.png 1080x1920,批次 1 风格(深色底 + 极简主题图形 + 居中大标题 + 手势图例两行 + 底部标语),固定 seed。

  • abyss:深海近黑蓝渐变(下潜方向)+ 声呐同心圆脉冲光点 + 右下暗色回波环(「回音」具象)+ 水雪微粒;视觉审查通过(标题/图例/构图无缺陷)。
  • detective:墨蓝夜雨渐变 + 左上路灯暖光晕 + 双景深斜雨丝 + 中央翻开卷宗剪影(右页一条对不上的红线 = 矛盾具象);CDN 缓存碰撞无法二次人工目测,已用像素级断言验证(暖光 +36.7 / 红线 155px / 雨丝竖向性 1.64 / 标题亮区 50595px)。

5. check_all_assets 结果(abyss/detective 已入 GAMES + FLAT_OK + key 规则)

| 游戏 | ogg | m4a | 0字节 | 解码失败 | voice male/female id 一致 | key 一致且 ⊆ 主集 |
| abyss    | 298 | 298 | 0 | 0 | ✅ 各 116(平铺 21 个 NPC 句,豁免) | ✅ 各 11 ⊆ 主集 |
| detective| 279 | 279 | 0 | 0 | ✅ 各 96(平铺 52 个 NPC 句,豁免) | ✅ 各 10 ⊆ 主集 |
结论:10 游戏全绿,exit=0(其余 8 游戏无回归)

构成:abyss = voice 275(双性别 232 + key 22 + NPC 21)+ sfx 19 + bgm 4;detective = voice 264(192+20+52)+ sfx 12 + bgm 3。两游戏合计 1154 文件(ogg+m4a)。

6. 缺失清单与遗留

  1. 无缺失:SA3 token 就绪,本批 SYN+SA3 全量直产,无批次 1 式补产轮。
  2. 人工试听项(建议开发联调前抽检):
    • abyss 电台滤波可读性(17b 标注中风险两组:小舟 vs female 玩家、老白 vs male 玩家同 speaker——不可读句回退未滤波原声,staging 重转即可);
    • abyss NPC 多音字(17b 文末注记:「脏」zāng、「闷」mèn、d3_zheng_e「都没敢出声」等);
    • detective 同 speaker 风险(18b 标注中风险两组:周先生 vs male 旁白、秦法医 vs female 旁白——sig 前缀兜底)与低风险三处(「得」de/「背」bèi/「处」chù);
    • 声音演技段:z_react_1..4 递进与 z_break_1..3 认罪三段(情绪靠省略号/破折号引导,试听确认)。
  3. 文档笔误待策划改:17b 头注「126 句」→ 127(§1 矛盾检查第 1 条);17 号 §7.3 key 路径表述与引擎实现不一致(第 2 条)。
  4. 签名 earcon 时长超指引:detective sig_* 实测 0.78-1.28s vs 文档 0.3-0.5s(「两下」类签名的内容下限;若导航节奏测试发现拖沓,可回 WIN 事件窗收紧重出)。
  5. 红线遵守:GPU 全程 flock 串行(TTS abyss→detective 两轮 + SA3 一轮,无并行;Mureka 为纯 API 不占 GPU 锁);Mureka $0.21 ≤ $0.30 且逐笔记账;token/key 未入任何入库文件(env.d/{mureka,sfx}.sh 均被 .gitignore 覆盖,已验证);未改 web/engine/**、未写任何 game.js/index.html/test;web/{abyss,detective}/gen/staging/ 已补进 .gitignore(此前规则只列了 radio/dungeon,会误入库)。

7. 产出物索引

类型 路径
台词表(入库) tools/gen_voice_dual.py(abyss/detective 表 + SPEAKERS + VOICE_SPK + NPCS + NPC_BANDPASS + KEY_LINES)
两表一致校验 /tmp/verify_batch2.py(一次性,未入库;重跑即再验)
voice 成品 web/{abyss,detective}/audio/voice/{male,female}/(+ key/ 子目录)与平铺 voice/<id>.*(abyss 21 句带滤波)
bgm 成品 + 脚本 web/{abyss,detective}/audio/bgm/;web/{abyss,detective}/gen/gen_bgm.sh
sfx 成品 + 脚本 web/{abyss,detective}/audio/sfx/;gen_sfx.py(SYN)+ gen_sfx_sa3.py(SA3)
封面 web/{abyss,detective}/cover.png + gen/gen_cover.py
期望文本映射 web/harness/voice_text.json(games=10)
台账/总账 tools/mureka_log.md(2026-09-09 批次 2 节);docs/audio/asset-manifest.md(abyss/detective 章节 + 批次 2 资产账)
staging(不入库) tools/gen_voice_dual_wav/{abyss,detective}/、web/<game>/gen/staging/、tools/bgm_post_wav/{abyss,detective}/、tools/mureka_out/{abyss,detective}-*/