# web/rpg 音频资产清单与再生成方法(R4;R6 更新) 设计依据:`docs/design/05-rpg-ch1-voice-ids.md`(台词)、`05-rpg-chapter1.md`(场景/战斗/资产清单)、`05-rpg-addendum.md`(层叠修正)、`docs/design/11-rpg-battle-rebalance.md`(R6 战斗重构缺口资产)。 ## 目录结构 ``` web/rpg/audio/ ├── voice/ │ ├── male/ # 旁白 118 id(Uncle_Fu,说书人)×{ogg,m4a} │ ├── female/ # 旁白 118 id(Serena,讲武侠故事)×{ogg,m4a} │ └── npc_*. # NPC 14 id 单音色平铺(引擎平铺回退,同 storyline 角色模式) ├── bgm/ # village / battle / boss / ending(R4)+ menu / explore(R6);90s 无缝循环 └── sfx/ # 37 件(tel_* 9 / 战斗 7 / 探索 4 / SYN 6 / amb_* 11) ``` ## voice(118 旁白 id + 14 NPC id) - 旁白 id 分组:A 序章 `intro_1..3`;S 系统 `sys_* help_* settings_hint st_*`(28)+ R6 `skip_hint`;D 场景 `desc_*`(16,gate/boss1 按设计无 _re 回访句);O 选项 `opt_*`(18);E 事件 `evt_*`(6);B 战斗 `btl_* cmd_* tut_*`(32,含 R5 补录 `btl_half_bandit`、R6 首战教学 `tut_battle_1..5` 与 11 号文档补录 `tut_b0 tut_b6 btl_flee_fail boss1_warn`);SH 商店 `shop_*`(7);addendum 补录敌方档位 `foe_hp_high/mid/low`(3)。 - NPC(平铺,speaker+instruct 恒定):村长 `npc_headman_1..4`(Uncle_Fu·慈祥和缓的老者);老猎人 `npc_hunter_1..4`(Eric·沙哑粗犷豪爽);寨丁头目 `npc_elite_1/half/die`(Dylan·凶狠粗鲁);黑风寨主 `npc_boss1_1/2/die`(Uncle_Fu·低沉阴狠——与村长同 speaker 不同 instruct,请试听区分度)。 - 再生成:`source env.d/tts.sh && flock .gpu.lock .venv-tts/bin/python tools/gen_voice_dual.py --game rpg --gender both`(staging 在 `tools/gen_voice_dual_wav/rpg/`,断点续跑;`--only id1,id2` 单句重录;`--check` 两性时长离群检查;`--convert` 转 ogg+m4a)。 - R6 缺口 4 句(`tut_b0 tut_b6 btl_flee_fail boss1_warn`):`flock .gpu.lock .venv-tts/bin/python web/rpg/gen/gen_gap_voice.py`,再 `--check` / `--convert`(staging 在 `web/rpg/gen/staging/voice/`,音色/instruct/质控同主管线)。 ## bgm(6 首,Mureka) `village`(村庄/安全区)`battle`(普通战斗)`boss`(Boss 战)`ending`(章结算)+ R6 新增 `menu`(模态菜单 pad,-24 LUFS)与 `explore`(探索轻垫,引擎 volume 0.35,10 文档 §7 恢复)。`amb_*` 仍由游戏层手动 loop 接 sfx 总线(不变)。再生成:`source env.d/mureka.sh && python3 tools/mureka_gen.py --prompt ... --out tools/mureka_out/rpg_`(prompt 见 `tools/mureka_log.md`;R6 两首的 task id 见 docs/audio/round6-report.md §2)。 ## sfx(37 件) - SA3 生成 30 件(R4 批 `tools/gen_rpg_sfx.sh`,staging `tools/gen_rpg_sfx_wav/`;R6 `victory` 用 `web/rpg/gen/gen_gap_sfx.sh`,staging `web/rpg/gen/staging/sfx/`):前摇 `tel_wolf tel_bandit tel_spider tel_elite tel_boss1 tel_croc tel_shaman tel_puppet tel_boss2`(裁 1.0s 格挡窗口);战斗 `atk_swing atk_hit parry skill_slash enemy_die potion victory`(胜利号角 1.2s);探索 `chest drink_water rest door_heavy`;环境 `amb_village amb_path amb_fork amb_chest amb_stream amb_hunter amb_deepwood amb_gate amb_hall amb_swamp amb_peak`(6s→1s 首尾交叉淡化成 5s 循环,均值 -25dB)。 - 程序合成 6 件(numpy;R4 五件 `tools/gen_rpg_syn.py`,R6 `turn_player` 由 `web/rpg/gen/gen_gap_sfx.py` 合成):`hurt`(低频闷击)`flee`(渐远脚步)`step`(单步)`coin`(硬币叮当)`levelup`(A 小调五声上行钟声琶音)`turn_player`(E5→A5 上行双音拨弦 0.36s,"轮到你"听觉标点)。 - one-shot 统一 R6 标准:去直流 + 首尾 8ms cos² 淡入淡出 + 峰值 -3dBFS(ogg 解码回读真峰值校验);`ui_deny` 按设计不做(反馈走震动)。 ## 双格式约定 全部 `.ogg`(libvorbis q3, 44.1kHz)+ `.m4a`(aac 128k, 44.1kHz)。