# R4 音频轮次报告(2026-08-29,音乐音效总监) 本轮主题:新 RPG《剑与声》第一章全套音频资产 + space `menu_main` 改词重录。依据 `docs/design/05-rpg-ch1-voice-ids.md`、`05-rpg-chapter1.md`、`05-rpg-addendum.md`。Mureka 本轮 $0.12 / $0.30,**累计 $0.42 / $2.00**。 ## 1. 语音(107 旁白 ×2 + 14 NPC) | 类别 | 数量 | 总时长 | 落点 | |---|---|---|---| | 旁白 male(Uncle_Fu·说书人) | 107 | 282.8s | `web/rpg/audio/voice/male/` | | 旁白 female(Serena·武侠故事) | 107 | 242.6s | `web/rpg/audio/voice/female/` | | NPC 单音色(村长/老猎人/头目/寨主) | 14 | 50.9s | `web/rpg/audio/voice/` 平铺 | - 台词表照录 05-rpg-ch1-voice-ids.md(104 句)+ addendum §6.2 补录 `foe_hp_high/mid/low`(3 句)= 107 句,已合入 `tools/gen_voice_dual.py`(新增 `rpg` 条目与 `NPCS` 平铺机制,管线断点续跑/`--only`/`--check`/`--convert` 全部适用)。 - **计数勘误**:台词表头写"NPC 16 句",实表只有 14 句(headman 4 + hunter 4 + elite 3 + boss1 3);合计 107×2+14 = 228 条(×2 格式 = 456 文件),以此为准。 - QC:时长/峰值/两性离群(>3 倍)**ALL OK,零重生成**。 - 已知风险:村长与黑风寨主同 speaker(Uncle_Fu)不同 instruct(慈祥和缓 vs 低沉阴狠),按设计"从不在同场景出现"处理,**需人工试听确认区分度**。 ## 2. BGM(4 首,Mureka) | id | task/choice | 选用 | 成品 | |---|---|---|---| | village | 157968630808577 / 157968750477315 | 候选 1(229.2s) | 90.00s 循环,mean -23.0dB | | battle | 157968792551426 / 157968893214722 | 候选 0(212.8s) | 90.00s,mean -20.5dB | | boss | 157968932864001 / 157969029332994 | 候选 1(178.2s) | 90.00s,mean -22.6dB | | ending | 157969071407105 / 157969188913155 | 候选 1(248.4s) | 90.00s,mean -21.9dB | - 4 任务一次成功无重试。处理:强 onset 起点 → 90s 裁剪 + 首尾 3s crossfade 无缝循环 → loudnorm -20 LUFS → ogg q3 + m4a。RPG 无节拍网格,BPM 不做硬校验。 - addendum §3 裁定:`bgm/explore` 取消(探索期无音乐),amb 走 sfx 层。花费已追加 `tools/mureka_log.md`。 ## 3. SFX(35 件) - **SA3 29 件**(`tools/gen_rpg_sfx.sh`,staging `tools/gen_rpg_sfx_wav/`):前摇 `tel_*` ×9(含 ch2/3 备用 croc/shaman/puppet/boss2,统一裁 1.0s 格挡窗口)、战斗 `atk_swing atk_hit parry skill_slash enemy_die potion`、探索 `chest drink_water rest door_heavy`、环境 `amb_*` ×11(含备用 swamp/peak,6s→1s 首尾交叉淡化成 5s 循环)。 - **SYN 5 件**(`tools/gen_rpg_syn.py`):`hurt`(60Hz 低频闷击,与 atk_hit 区分)、`flee`(渐远脚步)、`step`(单步)、`coin`(硬币叮当)、`levelup`(A 小调五声 A4-C5-D5-E5-A5 上行钟声琶音)。 - 响度:one-shot 峰值 -1dBFS;amb 均值 -25dB(amb_hunter/amb_hall 因 crackle 峰值封顶初次仅 -31dB,已用 `alimiter level=false` 限幅重做至 -25.9dB——R2 学到的 level=true 陷阱的反向应用)。 - `ui_deny` 按设计不做。`web/rpg/gen/README.md` 有完整清单与再生成方法。 ## 4. space `menu_main` 改词重录 按 round2-review 裁决②(全球菜单约定:单击切换/双击确认),文本由「菜单。左右滑选择,单击确认。」改为「**菜单。单击切换选项,双击确认。**」,双性别重录覆盖 `web/space/audio/voice/male|female/menu_main.*`。 **同类遗留**:rhythm `menu_main` 文本同为旧约定("左右滑选择,单击确认"),且 rpg 的 `sys_menu`/`shop_open` 按 RPG 豁免条款保持"左右滑+单击"不变(正确)。rhythm 那句建议 R5 一并处理(rhythm 选曲界面非模态菜单仍用左右滑+单击,仅模态菜单改新约定——需策划确认文案后我重录)。 ## 5. 给开发的 id 总表(可直接 import) 语音 id 分组(旁白 male/female 同集,NPC 平铺单集): ```js const RPG_VOICE = { intro: ['intro_1','intro_2','intro_3'], system: ['sys_continue_ask','sys_new_game','sys_saved','sys_rest','sys_drink', 'sys_menu','sys_menu_resume','sys_menu_save','sys_menu_help', 'help_explore','help_battle','settings_hint'], status: ['st_hp_high','st_hp_mid','st_hp_low','st_gold_poor','st_gold_some','st_gold_rich', 'st_lv_low','st_lv_mid','st_lv_high', 'st_weapon_none','st_weapon_iron','st_weapon_steel','st_weapon_wind', 'st_armor_none','st_armor_leather','st_armor_iron'], foeHp: ['foe_hp_high','foe_hp_mid','foe_hp_low'], // 敌方血量档位(addendum §6.2) desc: ['desc_village','desc_village_re','desc_path','desc_path_re','desc_fork','desc_fork_re', 'desc_chest','desc_chest_re','desc_stream','desc_stream_re','desc_hunter','desc_hunter_re', 'desc_deepwood','desc_deepwood_re','desc_gate','desc_hall'], option: ['opt_go_path','opt_go_fork','opt_go_chest','opt_go_stream','opt_go_hunter', 'opt_go_deepwood','opt_go_gate','opt_back','opt_shop','opt_rest','opt_status', 'opt_investigate','opt_open_chest','opt_drink','opt_talk_hunter','opt_assault', 'opt_sneak','opt_leave'], event: ['evt_gold15','evt_nothing','evt_chest','evt_hunter_gift','evt_gate_open','evt_ch1_end'], battle: ['btl_start_wolf','btl_start_bandit','btl_start_spider','btl_start_elite','btl_start_boss1', 'cmd_attack','cmd_skill','cmd_defend','cmd_item','btl_nomp','btl_noitem','btl_flee', 'btl_noflee','btl_enemy_die','btl_win','btl_loot_small','btl_loot_mid','btl_loot_big', 'btl_levelup','btl_lose','btl_lose_hint','tut_b1','tut_b2','tut_b3','tut_b4','tut_b5'], shop: ['shop_open','shop_price_sword','shop_price_armor','shop_price_potion', 'shop_owned','shop_poor','shop_buy'], npc: ['npc_headman_1','npc_headman_2','npc_headman_3','npc_headman_4', 'npc_hunter_1','npc_hunter_2','npc_hunter_3','npc_hunter_4', 'npc_elite_1','npc_elite_half','npc_elite_die', 'npc_boss1_1','npc_boss1_2','npc_boss1_die'], // 平铺 voice/,无性别目录 }; const RPG_BGM = ['village','battle','boss','ending']; const RPG_SFX = { telegraph: ['tel_wolf','tel_bandit','tel_spider','tel_elite','tel_boss1', // 1.0s 格挡窗口 'tel_croc','tel_shaman','tel_puppet','tel_boss2'], // ch2/3 备用 combat: ['atk_swing','atk_hit','parry','skill_slash','enemy_die','potion','hurt','flee'], explore: ['step','coin','chest','drink_water','rest','levelup','door_heavy'], ambient: ['amb_village','amb_path','amb_fork','amb_chest','amb_stream','amb_hunter', 'amb_deepwood','amb_gate','amb_hall','amb_swamp','amb_peak'], // 5s 循环,手动 loop 接 sfx 总线 }; ``` 配合要点: 1. `amb_*` 需手动 BufferSource loop 接 `_sfxBus`(addendum §3 对实现的唯一新要求;不受 bgm=off 设置影响)。 2. 前摇音 `tel_` 起点即格挡窗口起点(1.0s),Boss 二阶段 `tel_boss1` 以 playbackRate 1.2 重播(不加资产)。 3. `foe_hp_*` 为战斗态上滑敌方档位句;降档才播 `st_hp_mid/low`。 4. 场景 `desc_*` 首次/回访成对(`_re` 后缀为回访短句)。 5. **设计缺口(请策划补)**:敌人表中山贼标了半血句 `btl_half_bandit`,但台词表无此 id(头目有 `npc_elite_half`)——按 chapter1 §3"无此语音的敌人跳过"可运行,如需补齐请发文案我重录。`npc_boss3_warn`/`btl_half_shaman`/`btl_half_shadow` 属 ch2/3 最小集(addendum §5),等 ch2 台词表。 ## 6. 遗留问题 - 村长/寨主同 speaker 区分度、全部新语音发音准确性:未做人工试听(QC 均为自动检查)。 - rhythm `menu_main` 旧菜单约定文案(§4)。 - rhythm 乐器音 `inst_accent` 与设计文档 §4 的 `accent` 命名差异(R3 已按 inst_accent 落盘,开发以此为准)。 ## 7. Mureka 花费 本轮 $0.12(4 任务全成功);累计 **$0.42 / $2.00**,剩 $1.58。明细见 `tools/mureka_log.md` R4 节。