4.0 KiB
4.0 KiB
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)+ R6skip_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,stagingtools/gen_rpg_sfx_wav/;R6victory用web/rpg/gen/gen_gap_sfx.sh,stagingweb/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,R6turn_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)。