Files

37 lines
4.0 KiB
Markdown
Raw Permalink 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.
# 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_<id>`(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)。