- 新增 web/ 纯音频 HTML5 平台:共享引擎(手势/WebAudio 三层/设置/震动)、 Node 零依赖服务器(静态 + 注册登录 + 进度存档 API) - 游戏:剑与声(RPG 新作)、声命线、暗室(重设计)、音序回响(重设计)、 节拍行者(跟随领奏重构)、盲航(同向闪避重构);声东击西删除 - 全局功能:男声/女声双套 TTS 资产、三档语速、BGM 音量三档、 震动反馈语言(10 种震型)、服务器进度同步 - 资产:899 ogg + 899 m4a(Qwen3-TTS 双性别语音、Stable Audio 3 音效、 Mureka BGM 4+3 首),终检零缺失 - 文档:docs/design/ 13 篇设计审查文档、docs/audio/ 资产管线、 web/server/README.md API 文档
8.0 KiB
8.0 KiB
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,stagingtools/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 平铺单集):
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 总线
};
配合要点:
amb_*需手动 BufferSource loop 接_sfxBus(addendum §3 对实现的唯一新要求;不受 bgm=off 设置影响)。- 前摇音
tel_<enemy>起点即格挡窗口起点(1.0s),Boss 二阶段tel_boss1以 playbackRate 1.2 重播(不加资产)。 foe_hp_*为战斗态上滑敌方档位句;降档才播st_hp_mid/low。- 场景
desc_*首次/回访成对(_re后缀为回访短句)。 - 设计缺口(请策划补):敌人表中山贼标了半血句
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 节。