Files
SoundGame/docs/audio/round4-report.md
T
SoundGame Dev cc0f8c008d HTML5 重写:6 款游戏 + 用户系统 + 全局设置 + 5 轮迭代重构
- 新增 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 文档
2026-08-29 21:55:44 +08:00

103 lines
8.0 KiB
Markdown
Raw 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.
# 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_<enemy>` 起点即格挡窗口起点(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 节。