save
This commit is contained in:
@@ -1,21 +0,0 @@
|
||||
# 全项目音频资产终检(R5,2026-08-29)
|
||||
|
||||
| 游戏 | ogg | m4a | 0字节 | 解码失败 | voice male/female id 一致 |
|
||||
|---|---|---|---|---|---|
|
||||
| storyline | 136 | 136 | 0 | 0 | ✅ 各 37(平铺 48 个角色/NPC 句,豁免) |
|
||||
| escape | 169 | 169 | 0 | 0 | ✅ 各 75 |
|
||||
| simon | 146 | 146 | 0 | 0 | ✅ 各 69 |
|
||||
| rhythm | 75 | 75 | 0 | 0 | ✅ 各 32 |
|
||||
| space | 119 | 119 | 0 | 0 | ✅ 各 53 |
|
||||
| rpg | 283 | 283 | 0 | 0 | ✅ 各 114(平铺 14 个角色/NPC 句,豁免) |
|
||||
|
||||
## 结论
|
||||
|
||||
全部通过:双格式配对完整、无 0 字节、全部可解码、voice 性别目录 id 集合一致(storyline/rpg 平铺角色句按约定豁免)。
|
||||
|
||||
## 附注
|
||||
|
||||
- storyline 平铺 = 角色台词(单音色永久保留)+ R1 旁白旧文件(遗产,待清理)。
|
||||
- rpg 平铺 = NPC 句(设计如此,单音色)。
|
||||
- R6 起 sfx 峰值标准为 -3dBFS(真峰值经解码回读校验);voice 目录响度策略不变(峰值 0.89)。
|
||||
- 终检脚本:`tools/check_all_assets.py`;爆音扫描/修复:`tools/scan_clicks.py` / `tools/fix_clicks.py`。
|
||||
@@ -1,72 +0,0 @@
|
||||
# R1 音频轮次报告(2026-08-29,音乐音效总监)
|
||||
|
||||
本轮主题:双性别旁白资产管线 + simon BGM 移除。Mureka 花费 $0(无新 BGM,预算余额 $1.85)。
|
||||
|
||||
## 1. 新目录约定(给开发)
|
||||
|
||||
- 旁白/系统音按性别分目录:`web/<game>/audio/voice/male/<id>.{ogg,m4a}` 与 `web/<game>/audio/voice/female/<id>.{ogg,m4a}`。
|
||||
- 两个目录的 **id 集合完全一致**(每游戏核对过),引擎按用户选择整目录切换即可,无需按 id 特判。
|
||||
- 双格式:每个 id 都有 `.ogg`(libvorbis q3 44.1k)和 `.m4a`(aac 128k 44.1k),沿用现有格式协商逻辑。
|
||||
- **平铺的旧文件 `voice/<id>.*` 本轮保留未动**。引擎切到 male/female 子目录后,后续轮次再删除平铺文件(storyline 角色台词除外,见 §3)。
|
||||
- staging wav 保留在 `tools/gen_voice_dual_wav/<game>/<gender>/`,供后续轮次增量重生成(管线支持断点续跑,已有且合格的 wav 会跳过)。
|
||||
|
||||
## 2. 生成统计
|
||||
|
||||
| 游戏 | ids/性别 | male 总时长 | female 总时长 |
|
||||
|---|---|---|---|
|
||||
| storyline | 36 | 806.6s | 960.6s |
|
||||
| escape | 41 | 230.8s | 212.4s |
|
||||
| simon | 30 | 63.4s | 62.9s |
|
||||
| rhythm | 9 | 71.5s | 59.0s |
|
||||
| space | 27 | 78.2s | 65.1s |
|
||||
| **合计** | **143 × 2 = 286 条** | 1250.5s | 1360.0s |
|
||||
|
||||
落盘文件 286 × 2 格式 = 572 个。质量控制:全部通过 时长>0.3s / 峰值>0.05 / 峰值归一 0.89;数字类同 instruct 整批生成;>40 字台词拆句拼接。两性时长离群(>3 倍)初检 3 条,已全部重生成并复检通过:
|
||||
|
||||
- `simon/male/num_4`(8.00s → 0.48s)
|
||||
- `simon/female/teach_end`(29.04s → 14.80s)
|
||||
- `space/male/n_ge`(2.16s → 1.12s)
|
||||
|
||||
## 3. storyline 角色音色映射(角色台词不做双性别)
|
||||
|
||||
| 角色 | speaker | 文件 id(沿用平铺原文件) |
|
||||
|---|---|---|
|
||||
| 旁白/系统音 | male=Uncle_Fu / female=Vivian | 36 个双性别 id(见 asset-manifest.md) |
|
||||
| 林晚(主角) | Serena | n02_linwan n03_radio n12_take n19_betray n21_redeem n24_open n25_secure |
|
||||
| 猎狗(反派) | Dylan | n07_dog n18_dog |
|
||||
| 小满(小男孩) | Vivian(童声 instruct) | e1_child |
|
||||
| 林晨(妹妹录音) | Vivian(收音机 instruct) | n03_msg |
|
||||
| 广播女声 | Vivian(广播 instruct) | n05_bcast |
|
||||
|
||||
**需要开发配合**:角色台词在两个性别下使用同一份音频。建议引擎对 storyline 做回退:在 `voice/<gender>/` 找不到的 id 回退读平铺 `voice/<id>`;或由开发/后续轮次把 12 个角色 id 复制进两个子目录(资产侧未复制,避免重复文件进入仓库前等引擎方案定稿)。
|
||||
|
||||
注意:female 旁白选用 Vivian 而非 Serena,因为 Serena 是主角林晚的音色,旁白与主角同声会混淆;代价是旁白与小满/林晨/广播同 speaker,已用截然不同的 instruct(冷静低沉 vs 童声/收音机/机械广播)区分,请策划试听确认。
|
||||
|
||||
## 4. 音色分配表
|
||||
|
||||
| 游戏 | male | female |
|
||||
|---|---|---|
|
||||
| storyline | Uncle_Fu(沿用原旁白) | Vivian |
|
||||
| escape | Uncle_Fu(沿用) | Serena |
|
||||
| simon | Uncle_Fu | Serena(沿用) |
|
||||
| rhythm | Uncle_Fu | Vivian(沿用) |
|
||||
| space | Uncle_Fu | Serena(沿用) |
|
||||
|
||||
Ryan(英语母语音色)未采用:项目已有中文发音投诉(反馈⑥),男声统一中文母语 Uncle_Fu。冒烟样本在 `tools/samples/ryan_zh_*.wav`,如策划试听认为可用,改 `tools/gen_voice_dual.py` 的 `SPEAKERS` 重跑即可。
|
||||
|
||||
## 5. 需要游戏代码配合的点
|
||||
|
||||
1. **引擎支持 voice 性别目录切换**:按用户设置在 `audio/voice/male|female/` 之间切换;storyline 需平铺回退(§3)。
|
||||
2. **simon 删除 BGM 引用**:资产 `web/simon/audio/bgm/theme.{ogg,m4a}` 已按用户要求删除(bgm/ 目录现为空),请移除 game.js 中的 bgm 加载/播放逻辑及 preload 清单条目。
|
||||
3. **语音选择 UI 入口**:需要「男声/女声」设置项(全局或每游戏),默认建议 male=storyline/escape、female=simon/rhythm/space(即各游戏原音色性别),具体由策划定。
|
||||
4. 平铺旧 voice 文件待引擎切换完成后通知音频侧清理(R2+)。
|
||||
|
||||
## 6. 质量遗留问题
|
||||
|
||||
- 本轮 QC 为自动检查(时长/峰值/两性离群),**未做人工试听**;发音准确性需策划/QA 试听把关。文本层多音字风险清单在 `docs/audio/asset-manifest.md`(如 storyline help 的「重听」建议改「重新听」),确认误读后改台词表重跑单条即可。
|
||||
- `simon/female/teach_end` 重生成后 14.8s(male 7.8s),比值正常但偏长,建议试听确认无重复啰嗦。
|
||||
- 管线脚本:`tools/gen_voice_dual.py`(含全部台词表,支持 `--game/--gender/--only/--check/--convert`)。
|
||||
|
||||
## 7. Mureka 花费
|
||||
|
||||
本轮 $0(无新 BGM 需求;simon BGM 为删除而非重制)。累计 $0.15 / $2.00,未动 `tools/mureka_log.md`(无新条目)。
|
||||
@@ -1,59 +0,0 @@
|
||||
# R2 音频轮次报告(2026-08-29,音乐音效总监)
|
||||
|
||||
本轮主题:《暗室》《音序回响》重设计语音资产 + escape 环境音扩展。依据 `docs/design/01-escape-redesign.md`、`02-simon-redesign.md` 与 `00-global-ux.md`。Mureka 花费 $0。
|
||||
|
||||
## 1. 首要交付物
|
||||
|
||||
`docs/audio/round2-voice-ids.md` —— 两款游戏全部语音 id → 台词全文 → instruct 对照表,含新增/保留/删除标记和代码映射区间(time_band/score_band)。开发照此实现即可。
|
||||
|
||||
## 2. 新资产统计
|
||||
|
||||
| 游戏 | 性别 | id 数 | 总时长 | 文件数(ogg+m4a) |
|
||||
|---|---|---|---|---|
|
||||
| escape | male | 74 | 346.6s | 148 |
|
||||
| escape | female | 74 | 320.6s | 148 |
|
||||
| simon | male | 68 | 190.2s | 136 |
|
||||
| simon | female | 68 | 154.3s | 136 |
|
||||
|
||||
合计 142 id × 2 性别 = 284 条语音(568 文件)。全部按 R2 新规范重录:每游戏同一 speaker + 同一 instruct 常量(00 文档 §3.2),instruct 不含语速词;一句一文件整句生成,无数字拼接。escape=Uncle_Fu/Serena,simon=Uncle_Fu/Serena(沿用 R1 分配)。
|
||||
|
||||
环境音新增 5 条(Stable Audio 3,6s 循环,ogg+m4a):`amb_storage amb_cabinet amb_power amb_gate amb_gate_live`,统一归一到 -25dB 均值(对齐旧 amb_drip/-28.7、amb_wind/-21.3 之间),storage/power 轻微偏左、cabinet 轻微偏右 pan 增强房间辨识;staging wav 在 `tools/gen_amb_wav/`。
|
||||
|
||||
## 3. 删除清单(资产侧已执行,代码侧开发跟进)
|
||||
|
||||
**escape voice**(20 id × 2 性别 × 2 格式 + 平铺):
|
||||
- 数字拼接链:`n0–n9 nshi unit_min unit_sec time_prefix` → `time_band1–4` 替代
|
||||
- 旧开场:`intro tutorial` → GUIDE `g0–g7` 替代
|
||||
- 旧提示:`hint_key hint_cabinet hint_box hint_gate` → `stuck_*` 三级提示替代
|
||||
|
||||
**simon voice**(23 id × 2 性别 × 2 格式 + 平铺):
|
||||
- 拼接件:`di lun num_shi num_0–num_9 score_pre best_pre` → `round_*`/`score_band*` 整句替代
|
||||
- 旧教学:`intro teach_up teach_down teach_left teach_right teach_tap teach_doubletap teach_end listen` → 交互教学 `t*_*` 替代
|
||||
|
||||
**sfx**:`simon/correct wrong newrecord`、`escape/ui_deny` 删除(反馈改震动,00 文档 §2)。
|
||||
|
||||
**平铺目录**:escape/simon 的 `audio/voice/*.{ogg,m4a}` 平铺旧文件已全部移除(引擎已支持 gender 目录)。storyline/rhythm/space 的平铺文件未动。
|
||||
|
||||
## 4. QC 结果
|
||||
|
||||
- 284 条全部通过:时长 >0.3s、峰值 >0.05、峰值归一 0.89。
|
||||
- 两性时长离群检测(>3 倍):escape、simon 均 **ALL OK**,本轮零重生成。
|
||||
- 双格式逐条核对:male/female 各目录 id 数与清单精确一致(74/68),无缺失(convert 已改为按台词表驱动,staging 残留旧 id 不会误落盘)。
|
||||
- 人工试听仍未做:发音准确性需策划/QA 把关;多音字规避已在新台词写作时执行(如"重听"→"重新听一遍"(reopen_prompt)、避免"还/得/着"歧义写法)。
|
||||
|
||||
## 5. 给开发的配合说明
|
||||
|
||||
1. 语音 id 以 `round2-voice-ids.md` 为唯一权威清单;删除 id 不得再引用(文件已不存在,引擎容错会静默跳过,但请清理引用)。
|
||||
2. `time_band1–4` 区间映射:`<120s / 120–300s / 300–600s / ≥600s`;`score_band1–6` 映射:`0 / 1–3 / 4–6 / 7–9 / 10–14 / ≥15`。
|
||||
3. escape L3 提示 = `stuck_<阶段>_3` + 按当前坐标算路链播 `nav_up/down/left/right`(两句以内);单击检查 = 先重播当前房间 `amb_*` 再播描述。
|
||||
4. escape 大门通电后环境音切 `amb_gate_live`;空房 `amb_wind`/`amb_hum` 轮换。
|
||||
5. simon 无 BGM(`bgm/` 已空,勿加载);`sfx/gameover` 保留为结束音。
|
||||
6. 菜单句 `menu_open/menu_restart/menu_home/menu_back` 两款游戏已各备一份;设置值播报("当前:女声,正常语速")为跨游戏需求,本清单未覆盖,建议 R3 统一处理。
|
||||
|
||||
## 6. 管线变更
|
||||
|
||||
- `tools/gen_voice_dual.py`:escape/simon 台词表整体替换为 R2 新版(全常量 instruct);`--convert` 改为按台词表驱动;其余游戏(storyline/rhythm/space)台词表与资产未动,脚本仍可全量复跑。
|
||||
|
||||
## 7. Mureka 花费
|
||||
|
||||
本轮 $0(两款游戏均无新 BGM 需求,simon 为去 BGM)。累计 $0.15 / $2.00。
|
||||
@@ -1,68 +0,0 @@
|
||||
# R3 音频轮次报告(2026-08-29,音乐音效总监)
|
||||
|
||||
本轮主题:《节拍行者》重构语音 + 3 首 BPM 精确 BGM,《盲航》重构语音备产。依据 `docs/design/03-rhythm-voice-ids.md`、`03-rhythm-rebuild.md`、`04-space-voice-ids.md`。Mureka 本轮 $0.15 / $0.30,累计 $0.30 / $2.00。
|
||||
|
||||
## 1. rhythm 语音(重构版)
|
||||
|
||||
- 台词表照录 `docs/design/03-rhythm-voice-ids.md`(31 句),合入 `tools/gen_voice_dual.py` 全量替换 R1 版。female=Vivian / male=Uncle_Fu,全表同一 instruct 常量。
|
||||
- 生成统计:**male 31 条 / 116.6s,female 31 条 / 105.4s**(ogg+m4a 各 62 文件)。
|
||||
- QC:时长/峰值/两性离群(>3 倍)全部 **ALL OK,零重生成**。
|
||||
- 旧 id 清理:平铺 9 个旧 id 全部删除(`welcome rules tut_start tut_done grade_* restart`,其中 `grade_* restart` 按新文案重录覆盖,`welcome` 文案变更重录);`tut_start` 彻底弃用。目录现仅含新表 31 id × 2 性别。
|
||||
|
||||
## 2. rhythm BGM(3 首,Mureka)
|
||||
|
||||
| 曲目 | 选用候选(task/choice) | 源实测 BPM | 处理 | 成品实测 BPM | 循环时长 |
|
||||
|---|---|---|---|---|---|
|
||||
| track90《启程》 | 157963509563393 / 157963627134980(首提候选 1) | 98.75 | atempo=0.911392 拉伸 | **90.01** | 85.33s(32 小节) |
|
||||
| track105《追风》 | 157963652431875 / 157963780292611(首提候选 0) | **105.00 精确** | 无拉伸 | **104.99** | 73.14s(32 小节) |
|
||||
| track120《星爆》 | 157964212305921 / 157964317097985(重提候选 0) | **120.00 精确** | 无拉伸 | **120.00** | 72.00s(36 小节) |
|
||||
|
||||
- 后处理:首个强 onset 对齐小节头裁剪 → 整数小节 + 末 2 拍与开头 acrossfade 无缝循环 → loudnorm I=-20/TP=-2 → ogg q3 + m4a 128k。成品 mean -21.2/-21.3/-19.9dB。
|
||||
- **BPM 测量方法学(重要)**:`librosa.beat.beat_track` 在 22050Hz/hop512 下按整帧量化,105 BPM 附近一档=4.3 BPM(读数 103.36/107.67 都是量化伪影)。改用自写梳状扫描 `tools/bpm_precise.py`(0.05 BPM 步进 + 相位扫描 + 抛物线插值,合成 105.00 点击轨校准通过)。`tools/bpm_check.py`(粗筛)+ `bpm_precise.py`(判定)均留在 tools/。
|
||||
- 重试记录:track90 首提 121.0/98.75、重提 80.0/120.0 四候选均不达标,已达"每首最多重试 1 次"上限,按规则停止重提,选用 98.75 拉伸修正(电子乐 8.9% 减速,瞬态影响可接受,成品实测 90.01)。track120 首提不达标、重提即中 120.00。track105 首提即中。
|
||||
- 旧 `bgm/groove` 已删除。花费明细已追加 `tools/mureka_log.md`(5 任务 × $0.03 = $0.15)。
|
||||
|
||||
## 3. space 语音(备产,已完成)
|
||||
|
||||
`docs/design/04-space-voice-ids.md` 在本轮执行期间就绪(52 句),已全量生成:
|
||||
|
||||
- **male 52 条 / 188.0s,female 52 条 / 159.4s**(ogg+m4a 各 104 文件)。female=Serena / male=Uncle_Fu,全表同一 instruct。
|
||||
- QC:**ALL OK,零重生成**。
|
||||
- 旧 id 清理:`num0–9 num_shi num_bai n_* intro1–4 hit1 hit2 gameover restart` 全部弃用删除(含平铺);`shield_ready shield_block` 沿用 id 重录。
|
||||
- 注意:重构版闪避改为**同向**(左来左滑),新台词已按此写死,与 R1 旧台词(反向)语义相反——开发务必以新 game.js + 新语音为准,不可混用。
|
||||
|
||||
## 4. 删除清单(资产侧已执行)
|
||||
|
||||
- rhythm voice 平铺 9 id;rhythm sfx `judge_good judge_miss judge_perfect tick tick_accent`(反馈改震动、数拍融入 BGM);rhythm `bgm/groove`。
|
||||
- space voice 旧 27 id(平铺 + male/female 全部,新表 52 id 重录替换)。
|
||||
|
||||
## 5. 给开发的配合说明
|
||||
|
||||
1. **rhythm 乐器音 sfx(已于 R3 收尾补齐,见 §7)**:重构 §4 需要的 `inst_kick inst_snare inst_hat_l inst_hat_r inst_tom_hi inst_tom_lo inst_accent` 已生产落盘;`cue_*` 6 个旧提示音已确认不再使用并删除。
|
||||
2. BGM 对网格:三首成品 BPM 实测偏差 ≤0.01%,直接按设计 SPB(0.667/0.571/0.5s)排程即可;循环长度均为整数小节,`src.start(t0)` 从 0 播即是小节头。
|
||||
3. rhythm 结算评级句已含准确率档位文案(S=九成五/A=八成五/B=七成/C=不到七成),与 §2 判定阈值一致,代码直接按 rate 映射 grade_* 即可。
|
||||
4. space 里程碑触发点:10/25/50/100 颗(`ms_*`);结算 time 档 `<30/30–60/60–120/≥120s`,dodge 档 `<5/5–14/15–49/≥50`。
|
||||
|
||||
## 6. Mureka 花费
|
||||
|
||||
本轮 $0.15(5 任务,全部 succeeded);累计 **$0.30 / $2.00**。详见 `tools/mureka_log.md` R3 节。
|
||||
|
||||
## 7. 补产:rhythm 演奏乐器音 sfx(R3 收尾,2026-08-29)
|
||||
|
||||
重构 §4 的 7 个手势乐器音已补齐,落 `web/rhythm/audio/sfx/`(ogg q3 + m4a 128k):
|
||||
|
||||
| id | 内容 | 生成方式 | 时长 | 峰值 | 声像/调性 |
|
||||
|---|---|---|---|---|---|
|
||||
| inst_kick | 底鼓(tap) | Stable Audio 3("punchy deep EDM kick, dry, single hit") | 0.50s | -0.8dB | 中央 |
|
||||
| inst_snare | 军鼓(doubletap) | Stable Audio 3 | 0.45s | -1.1dB | 中央 |
|
||||
| inst_tom_hi | 高通鼓(up) | Stable Audio 3(high pitched synth tom) | 0.50s | -1.2dB | 中央,升调感 |
|
||||
| inst_tom_lo | 低通鼓(down) | Stable Audio 3(low pitched deep synth tom) | 0.60s | -1.0dB | 中央,降调感 |
|
||||
| inst_hat_l | 闭合镲(left) | Stable Audio 3(closed hi-hat) | 0.20s | -1.1dB | **极左**(L=-1.1dB / R=-22.7dB) |
|
||||
| inst_hat_r | 开放镲(right) | Stable Audio 3(open hi-hat) | 0.60s | -2.2dB | **极右**(R=-2.2dB / L=-23.3dB) |
|
||||
| inst_accent | Perfect 亮音叠加层 | **numpy 程序合成**(音高可控) | 0.38s | -1.8dB(0.8 峰值) | A minor 上行琶音 A5→E6→A6,三音 90ms 间隔快衰减 |
|
||||
|
||||
- 调性处理:三首 BGM 均 A minor(Mureka prompt 指定);accent 用 A 小调音级(A/E/A)程序合成,音高精确对齐;鼓件为伪音高打击乐,tom_hi/lo 在 prompt 里分了高低音区。staging wav 在 `tools/gen_inst_wav/`。
|
||||
- 后处理:去头静音(silenceremove -45dB)→ 定长裁剪 + 末端 40-100ms 淡出防爆音 → 峰值归一 -1dBFS → hat 先 downmix 再 pan 后归一(避免了 pan 叠加削波的一版返工)。
|
||||
- **id 映射注意**:设计文档 §4 写的叠加层 id 是 `sfx/accent`,本轮按主 agent 指令统一命名 `inst_accent`(与其他 6 件同前缀),开发以 `inst_accent` 为准。
|
||||
- **cue_* 处置:删除**。通读 03-rhythm-rebuild.md,全文无 cue_* 资产引用(仅 §8.2 有内部变量 `_cues` 指期望音符),§4 手势音全部改走 inst_* 乐器音——旧指令音 `cue_double cue_down cue_left cue_right cue_tap cue_up`(6 id × 2 格式)已删。
|
||||
- Mureka 花费不变(本轮 $0,累计 $0.30 / $2.00)。
|
||||
@@ -1,102 +0,0 @@
|
||||
# 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 节。
|
||||
@@ -1,39 +0,0 @@
|
||||
# R5 音频轮次报告(2026-08-29,音乐音效总监)
|
||||
|
||||
最终轮收尾:两处小批量补录 + 全项目资产终检。Mureka 本轮 $0(累计 **$0.42 / $2.00**,未再变动)。
|
||||
|
||||
## 1. 补录明细
|
||||
|
||||
### rhythm `menu_main` 改词重录(与 space R4 同款问题)
|
||||
|
||||
- 旧文案「菜单。左右滑选择,单击确认。」→ 新文案「**菜单。单击切换选项,双击确认。**」(round2-review 裁决②全球菜单约定;rhythm 选曲界面非模态菜单,仍左右滑+单击,不受影响)。
|
||||
- 双性别重录(male=Uncle_Fu 4.00s / female=Vivian 4.16s,沿用 rhythm 统一 instruct),覆盖 `web/rhythm/audio/voice/male|female/menu_main.{ogg,m4a}`。台词表已同步更新(`tools/gen_voice_dual.py` RHYTHM_LINES)。
|
||||
|
||||
### rpg `btl_half_bandit` 补录(设计缺口)
|
||||
|
||||
- 敌人表(05-rpg-chapter1 §4.2)给山贼标了半血句但台词表漏发;按 B 组风格补写「**山贼的攻势缓了下来。**」,已合入 `tools/gen_voice_dual.py` RPG_LINES(B 组,27→含此句)。
|
||||
- 双性别生成(male=Uncle_Fu 2.64s / female=Serena 1.52s),落 `web/rpg/audio/voice/male|female/btl_half_bandit.{ogg,m4a}`。rpg 旁白现为 108 id ×2。
|
||||
- 触发点:`CHECK_ENEMY_DEAD` 前、山贼 HP 首次 ≤50% 时插播(chapter1 §3 半血叙事钩子)。
|
||||
|
||||
## 2. 全项目资产终检(`docs/audio/final-asset-check.md`)
|
||||
|
||||
终检脚本 `tools/check_all_assets.py`(可重复执行),检查 6 游戏:双格式配对、0 字节、ffprobe 全量解码、voice 性别目录 id 集合一致性(storyline/rpg 平铺角色句豁免):
|
||||
|
||||
| 游戏 | ogg | m4a | voice 性别一致性 |
|
||||
|---|---|---|---|
|
||||
| storyline | 133 | 133 | ✅ 各 36(平铺 48 = 12 角色 + 36 R1 旁白遗产) |
|
||||
| escape | 166 | 166 | ✅ 各 74 |
|
||||
| simon | 143 | 143 | ✅ 各 68 |
|
||||
| rhythm | 72 | 72 | ✅ 各 31 |
|
||||
| space | 116 | 116 | ✅ 各 52 |
|
||||
| rpg | 269 | 269 | ✅ 各 108(平铺 14 NPC) |
|
||||
| **合计** | **899** | **899** | 全部通过 |
|
||||
|
||||
零 0 字节、零解码失败、零格式缺失。
|
||||
|
||||
## 3. 五轮累计遗留(供后续迭代参考)
|
||||
|
||||
1. **人工试听从未执行**:全部 QC 为自动检查(时长/峰值/离群/BPM/电平)。多音字风险清单在 asset-manifest.md,村长 vs 寨主同 speaker 区分度(R4)为最高优先试听项。
|
||||
2. storyline 平铺 36 个 R1 旁白遗产文件待引擎切换验证后清理。
|
||||
3. ch2/3 台词表最小集(addendum §5:`npc_boss3_warn`、`btl_half_shaman`、`btl_half_shadow`)待策划补发。
|
||||
4. Ryan 音色未采用样本在 `tools/samples/ryan_zh_*.wav`(如策划想给某游戏换年轻男声,改 SPEAKERS 重跑即可)。
|
||||
@@ -1,60 +0,0 @@
|
||||
# R6 音频轮次报告(2026-08-30,音乐音效总监)
|
||||
|
||||
本轮主题:爆音资产排查修复 + 状态 BGM 7 首 + RPG 战斗教学/全局跳过提示语音。Mureka 本轮 $0.21 / $1.00,**累计 $0.63 / $2.00**。
|
||||
|
||||
## 1. 爆音排查与修复
|
||||
|
||||
**工具**:`tools/scan_clicks.py`(扫描)/ `tools/fix_clicks.py`(修复),全程可复跑;原件备份在 `tools/asset_fix_backup/`(71 个文件)。
|
||||
|
||||
**扫描口径**:峰值 >-1dBFS / 首尾电平突变(首末 1ms 幅值 > 局部 50ms 峰值 15%,局部低于 -40dB 的静音区不判)/ 直流偏置 |DC|>0.001。voice 目录按任务要求**不动**(峰值 0.89 归一策略保留)。
|
||||
|
||||
**初扫结果(899 个 ogg 全量)**:
|
||||
|
||||
| 类别 | 数量 | 说明 |
|
||||
|---|---|---|
|
||||
| sfx/bgm 峰值过热 | 27 | 其中 rpg 15 个 SA3 one-shot 解码峰值高达 +0.9~+6.6dBFS(真·爆音源) |
|
||||
| sfx/bgm 直流偏置 | 43 | 最大 0.076(rpg/atk_swing) |
|
||||
| sfx/bgm 首尾突变 | 48 | 老资产无淡入淡出(storyline/escape/simon/space 为主) |
|
||||
| voice 过热 | 340 | 不修(语音响度策略不动,见任务说明) |
|
||||
|
||||
**根因发现(重要)**:R4 的 rpg SA3 one-shot 源是近满幅高密度波形(rms 0.84 / 峰值 0dBFS,>15kHz 能量 22%),MDCT 有损编码(vorbis/aac/opus 全部)重建时过冲 +4~8dB——ffmpeg `volumedetect` 走 s16 中间格式把超幅削到 0.0dB 显示,**之前的 QC 完全没发现**。本轮修复 encode 环节改为「编码→解码回读真峰值→超 -3dB 则降增益 + 首轮 18kHz 低通→重编」(最多 3 次迭代)。
|
||||
|
||||
**修复结果**:71 个 sfx/bgm 文件重处理(storyline 10 / escape 10 / simon 7 / rhythm 7 / space 11 / rpg 26),统一标准:one-shot 去直流 + 首尾 8ms cos² 淡入淡出 + 峰值 -3dBFS(真峰值校验后);loop(amb_*/bgm)只去直流(交叉淡化循环不加首尾淡入淡出,避免破坏循环)。rpg one-shot 从 staging 无损 wav 重做,其余从备份初代源修复(避免多次有损转码)。
|
||||
|
||||
**复扫(终态)**:sfx/bgm 99 个 —— 过热 0 / 直流 0 / 首尾突变 0。**全绿。**
|
||||
|
||||
## 2. 状态 BGM(7 首,docs/design/10-feedback2-state-bgm.md)
|
||||
|
||||
| 资产 | task id | 响度 | 成品 |
|
||||
|---|---|---|---|
|
||||
| storyline `bgm/menu` | 158096439705601 | -24 LUFS(menu pad 档) | 90s 循环,mean -24.4dB |
|
||||
| escape `bgm/menu` | 158096580149249 | -24 | mean -26.1dB |
|
||||
| simon `bgm/menu` | 158096714629126 | -24(引擎再按 volume 0.3) | mean -25.8dB |
|
||||
| rhythm `bgm/menu` | 158096850812929 | -24 | mean -25.3dB |
|
||||
| space `bgm/menu` | 158097039425538 | -24 | mean -25.1dB |
|
||||
| rpg `bgm/menu` | 158097182294017 | -24 | mean -25.9dB |
|
||||
| rpg `bgm/explore`(恢复) | 158097360420865 | -20(引擎 volume 0.35) | mean -22.3dB |
|
||||
|
||||
全部一次成功选候选 0;强 onset 起点 + 90s + 3s crossfade 无缝循环 + ogg q3/m4a。既有主题曲全部不动(storyline dark_drone、escape drone、rhythm track90/105/120、space engine、rpg village/battle/boss/ending)。状态→BGM 映射与切换时机以 10 文档 §2-§7 为准。
|
||||
|
||||
## 3. 新语音(22 条,双性别)
|
||||
|
||||
| id | 游戏 | 条数 | 文案 |
|
||||
|---|---|---|---|
|
||||
| `tut_battle_1..5` | rpg | 5×2 | 首次战斗教学:回合制说明 / 左右滑选招式单击出手 / 听前摇双击格挡 / 防御减半与金疮药 / 开场收束 |
|
||||
| `skip_hint` | 全 6 游戏 | 1×2×6 | 「单击可跳过旁白。」(各游戏既有 instruct 常量) |
|
||||
|
||||
均已合入 `tools/gen_voice_dual.py` 台词表并落盘 male/female 双格式。rpg 旁白现 113 id ×2(+NPC 14 平铺)。
|
||||
|
||||
## 4. 给游戏层的接线约定
|
||||
|
||||
1. **菜单/结算音乐**:所有游戏统一 `bgm/menu` id;切换时机与淡入时长按 10 文档逐游戏表(storyline 500ms、escape 400ms/结算 1500ms、simon 600ms/结算延后 1000ms、rhythm 800ms、space 300ms、rpg 战斗 400ms 快切)。
|
||||
2. simon 游玩全程不得加载任何 bgm;`bgm/menu` 仅菜单与结算,volume 0.3。
|
||||
3. rpg 双层:BGM 层报状态(menu/explore/village/battle/boss/ending),sfx 层 amb 报场景(手动 loop 接 `_sfxBus`,不变);胜利过渡 = battle 淡出 1500ms → explore 淡入 2000ms。
|
||||
4. `tut_battle_1..5`:首场战斗(enc_teach_wolf)B_START 时按序链播,二周目起跳过;`skip_hint` 为备选通用句,接入与否由游戏层定。
|
||||
5. `bgm=0` 时全部状态音乐不加载(含 menu pad 与 space engine——10 文档 §1.5 裁定)。
|
||||
|
||||
## 5. 复跑与终检
|
||||
|
||||
- `tools/check_all_assets.py` 终检已更新(`docs/audio/final-asset-check.md`):928 ogg + 928 m4a,双格式/0 字节/解码/性别集合一致性全绿。
|
||||
- 遗留:voice 层 340 个文件峰值 >-1dBFS 属 R1 既定归一(0.89 峰值),非爆音(有 TTS 天然淡入);如需统一可考虑 R7 评估,但会破坏既有响度平衡,不建议。
|
||||
Reference in New Issue
Block a user