Files
xsl 31372615b2 feat(new8/batch2): 《深海回音》abyss +《雨夜专案》detective 全套交付(多agent流水线:策划→资产→开发→测试→真资产复跑)
- abyss:game.js 242 断言全绿(剧本A-F六路径/氧气门三形态/sonarGate仲裁/结算死窗/双轨看门狗/radio 8项修复继承);资产 148句+11key变体(电台滤波带内能量47-62%→69-80%)
- detective:game.js 265 断言真资产下全绿(矩阵不变式独立重算/指证全路径/评级12组注入/VERDICT死窗/二周目变体);真资产复跑回炉3处实现修复(无进展轨墙钟化/菜单暂停记账/停止播报真停声——mock时长掩盖的正确性bug)
- 资产:TTS 539条×2格式、Mureka 7首 $0.21(累计$1.08/$2.00)、SYN12+SA3 19件(QC抓出1例AAC过冲并修复)、封面×2、check_all_assets 10游戏全绿(abyss 298/298、detective 279/279)
- 平台接线:大厅双卡片、BUCKETS 增 abyss/detective 桶(H4 断言更新 10 游戏)、voice_text.json 10游戏991句
- 回归:14 套件全绿(10 playtest+guide+engine-voice+engine-input+api-smoke 12/12)
- 设计偏差登记:abyss 7条/detective 9条(全为设计内部冲突按承诺清单/归因真话律取优)
2026-09-10 01:40:31 +08:00

178 lines
27 KiB
Markdown
Raw Permalink 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.
# 音频资产清单(R1,2026-08-29)
本文档是 5 个 web 游戏的 voice / sfx / bgm 资产总账,以及双性别语音的音色分配。
## 目录约定(R1 新增)
- 双性别旁白:`web/<game>/audio/voice/male/<id>.{ogg,m4a}` 和 `web/<game>/audio/voice/female/<id>.{ogg,m4a}`,两个目录内 id 集合完全一致。
- 原有平铺文件 `web/<game>/audio/voice/<id>.{ogg,m4a}` **暂时保留**,等引擎切换读取 male/female 子目录后由后续轮次清理。
- 所有 web 音频均为双格式:`.ogg`(libvorbis q3,44.1kHz)+ `.m4a`(aac 128k,44.1kHz,iOS 用)。
- 生成管线:`tools/gen_voice_dual.py`(台词表内嵌,从各游戏原 gen 脚本只读提取),staging wav 在 `tools/gen_voice_dual_wav/<game>/<gender>/`。
## 音色分配表(游戏 × 性别 → speaker)
| 游戏 | male | female | 备注 |
|---|---|---|---|
| storyline | Uncle_Fu | Vivian | 仅旁白+系统音双性别;角色音色不动(见下) |
| escape | Uncle_Fu | Serena | male 沿用原旁白音色 |
| simon | Uncle_Fu | Serena | female 沿用原主持人音色 |
| rhythm | Uncle_Fu | Vivian | female 沿用原解说音色 |
| space | Uncle_Fu | Serena | female 沿用原导航音色 |
| rpg | Uncle_Fu | Serena | 旁白;NPC 单音色平铺(见 rpg 章节) |
| radio | Uncle_Fu(HOST)/Dylan(PROD) | Serena(HOST)/Vivian(PROD) | 双性别行同性别双 speaker(VOICE_SPK 逐句覆盖);NPC 单音色平铺 5 音色+逐人带通(见 radio 章节) |
| dungeon | Uncle_Fu | Serena | 旁白全表统一 instruct,无 NPC |
| abyss | Uncle_Fu(DIVER)/Dylan(DECK) | Serena(DIVER)/Vivian(DECK) | 玩家/调度同性别双 speaker(VOICE_SPK,radio 同型);NPC 平铺 4 音色+逐船员带通(见 abyss 章节) |
| detective | Uncle_Fu | Serena | 旁白全表统一 instruct;NPC 平铺 5 音色满配、不滤波(见 detective 章节) |
关于 Ryan:冒烟测试样本在 `tools/samples/ryan_zh_*.wav`(3 条中文句)。Ryan 是英语母语音色(见 `env.d/tts.md`),项目已有中文发音投诉(反馈⑥),男声统一采用中文母语的 Uncle_Fu;如需换成 Ryan,改 `tools/gen_voice_dual.py` 的 `SPEAKERS` 表重跑即可。
## instruct 模板(每性别全游戏内一致)
同一游戏的同一类台词,male/female 使用同一 instruct 模板(仅性别描述词不同),数字/短句(≤2 字)一整批同 instruct 连续生成:
- storyline 旁白:male「低沉醇厚的中年男声旁白,冷静、缓慢,带着末世废墟的苍凉感」/ female「冷静低沉的女声旁白,语速缓慢,带着末世废墟的苍凉感」(另有 WARM/COLD/EPIC 三个结局变体,见脚本)
- escape(R2 起,全游戏同一常量):male「低沉平稳的男声,冷静、克制,带一点神秘感」/ female「沉稳平静的女声,冷静、克制,带一点神秘感」
- simon(R2 起,全游戏同一常量,两性别同文):「平静、清晰,像一个耐心的游戏主持人」
- rhythm(R3 起,全表统一):female(Vivian)「活力清晰的年轻女声,像节奏游戏主持人,情绪饱满但不夸张」/ male(Uncle_Fu)「低沉醇厚的男声,像节奏游戏主持人,平稳有力」
- space(R3 起,全表统一):female(Serena)「平静清晰的女声,像飞船领航员,沉稳可信」/ male(Uncle_Fu)「低沉醇厚的男声,像飞船领航员,沉稳有力」
- rpg(R4 起,旁白全表统一):female(Serena)「平静清晰的年轻女声,像在讲武侠故事」/ male(Uncle_Fu)「低沉醇厚的男声,像说书人,平静有韵味」;NPC 各角色 speaker+instruct 恒定(村长 Uncle_Fu·慈祥和缓的老者/老猎人 Eric·沙哑粗犷豪爽中带着暖意/头目 Dylan·凶狠粗鲁大声喝骂/寨主 Uncle_Fu·低沉阴狠慢条斯理)
- abyss(批次 2):DIVER female(Serena)「低沉冷静的年轻女声,深潜救援员,干练沉着,水下通讯的轻微气声」/ male(Uncle_Fu)「低沉冷静的男声,深潜救援员,干练沉着,水下通讯的轻微气声」;DECK female(Vivian)「清晰稳定的女声,母船潜水调度员,专业干脆,隔着耳机下达指令」/ male(Dylan)「清晰稳定的男声,母船潜水调度员,专业干脆,隔着耳机下达指令」;NPC 恒定(小舟 Serena·年轻女声二十三岁声呐兵缺氧后发虚强撑着干脆/老白 Uncle_Fu·沙哑爽朗中年男声五十岁轮机长忍着伤痛开玩笑/陈医官 Vivian·平静沙哑中年女声四十五岁船医专业镇定语气温和/高船长 Eric·低沉苍老男声五十八岁船长疲惫克制有老舵手的威严)
- detective(批次 2,旁白全表统一):female(Serena)「沉稳清晰的女声,专案组探长,冷静克制,像在雨夜读卷宗」/ male(Uncle_Fu)「低沉沉稳的男声,专案组探长,冷静克制,像在雨夜读卷宗」;NPC 恒定(老葛 Eric·苍老沙哑的男声守夜人慢悠悠带倦意/小顺 Dylan·年轻清亮的男声学徒怯生生的慌张诚实/周先生 Uncle_Fu·平板谨慎的男声账房字斟句酌被追问时渐慌/温太太 Vivian·快嘴泼辣的中年女声房东太太嗓门亮热心肠/秦法医 Serena·冷静干练的女声验尸官临床腔短句平直)
## 各游戏资产清单
### storyline《声命线》
- voice 双性别版(male/ 与 female/ 各 37 条(R6 +`skip_hint`):旁白 + 系统音 = `help menu status1 status2 status3 p1–p8 n00_intro n01_wake n04_exit n05_signal n06_whistle n08_vent n09_dead n10_rain n11_child n13_leave n14_ignore n15_bridge n16_culvert n16b_culvert_c n17_cable n17b_cable_c n20_convoy n22_fight n23_tower e1_dawn e2_price e3_alone e4_static`
- voice 角色台词(**不做双性别**,沿用平铺原文件):
| 角色 | speaker | 文件 id |
|---|---|---|
| 林晚(主角) | 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 |
约定:角色台词在两个性别目录下使用**同一份文件**(由开发复制/链接或引擎回退到平铺目录,见 round1-report)。
- sfx(12):`footsteps gunshot heartbeat radio_static rubble signal_beep struggle ui_confirm ui_menu water whistle wind`
- bgm(2):`dark_drone`(剧情)+ R6 新增 `menu`(菜单 pad,-24 LUFS 档)
### escape《暗室》(R2 重设计版,最终清单见 `round2-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 75 条(R6 +`skip_hint`):引导 `g0_intro g1_move g1_done g2_wall g3_left g4_down g5_inspect g5_key g6_doubletap g6_done g7_goal`、引导纠错 `guide_wrong_* guide_blunt_* guide_offpath guide_skip reopen_prompt`、三级提示 `stuck_ask stuck_{key,cabinet,box,gate}_{1,2,3}`、导航 `nav_{up,down,left,right}`、房间 `room_{storage,cabinet,power,gate}`、用时 `time_band1–4`、保留句 `wall start_room found_key inspect_* unlock_cabinet box_fixed fix_box escape use_fail inv_* replay again empty_1–3`、菜单 `help_ops menu_*`
- voice 已删除(R2):`n0–n9 nshi unit_min unit_sec time_prefix intro tutorial hint_key hint_cabinet hint_box hint_gate`(整句化替代);平铺 `voice/` 旧文件全部移除
- sfx(16):`amb_drip amb_hum amb_wind`(保留)+ R2 新增 `amb_storage amb_cabinet amb_power amb_gate amb_gate_live`(Stable Audio 3,6s,统一 -25dB 均值,storage/power 偏左、cabinet 偏右 pan)+ `door_creak gate_open pickup power_on spark step unlock wall win_chime`;已删除 `ui_deny`(反馈改震动)
- bgm(2):`drone`(探索)+ R6 新增 `menu`(菜单/结算 pad)
### simon《音序回响》(R2 重设计版,最终清单见 `round2-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 69 条(R6 +`skip_hint`):交互教学 `t0_welcome t0_goal t1_up–t6_double t_try t_ok t_wrong_* t_blunt_* t7_ready t7_retry t_skip`、轮次 `round_01–round_20 round_more`(整句)、成绩 `score_band1–6`(整句)、流程 `your_turn chances_out retry_use relisten replay rules_prompt rules gameover`、反馈 `correct wrong chance_plus new_record`、菜单 `menu_*`
- voice 已删除(R2):`di lun num_shi num_0–num_9 score_pre best_pre`(拼接件)+ `intro teach_* listen`(旧连播教学);平铺 `voice/` 旧文件全部移除
- sfx(7):`gameover tone_doubletap tone_down tone_left tone_right tone_tap tone_up`;已删除 `correct wrong newrecord`(反馈改震动)
- bgm:游玩**无 BGM**(用户要求);R6 新增 `menu`(菜单/结算极轻 pad,volume 0.3,10 文档 §4)
### rhythm《节拍行者》(R3 重构版,台词依据 `docs/design/03-rhythm-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 32 条(R6 +`skip_hint`):开场流程 `welcome welcome_back tut_1 tut_2 tut_3 tut_done tut_skip mid_song`、教学纠正 `retry_early retry_late retry_gesture retry_listen retry_skip`、选曲解锁 `select_hint song1_name song2_name song3_name song_locked unlock_song2 unlock_song3`、结算 `grade_s grade_a grade_b grade_c new_best_combo restart`、菜单规则 `rules settings_hint menu_main menu_resume menu_lobby`
- voice 已删除(R3):`tut_start`(平铺旧 id 全部移除,其余旧 id 均在 R2 已替换)
- voice 修订(R5):`menu_main` 改词重录为「菜单。单击切换选项,双击确认。」(对齐 round2-review 裁决②全球菜单约定;选曲界面非模态菜单不受影响)
- sfx(7,R3 补齐):`inst_kick inst_snare inst_hat_l inst_hat_r inst_tom_hi inst_tom_lo inst_accent`(演奏乐器音,详见 round3-report §7;hat_l 闭合镲极左 / hat_r 开放镲极右,accent 为 A minor 合成亮音);已删除 `judge_* tick tick_accent`(R3)与 `cue_*`(R3 收尾,重构不再使用指令音)
- bgm(3,R3 重制):`track90`(90.01 BPM,85.33s)`track105`(104.99 BPM,73.14s)`track120`(120.00 BPM,72.00s),A minor 电子乐,整数小节无缝循环,loudnorm -20 LUFS;旧 `groove` 已删除;R6 新增 `menu`(选曲/结算 pad)
### space《盲航》(R3 备产,台词依据 `docs/design/04-space-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 53 条(R6 +`skip_hint`):演练 `drill_*`(14)、保护期 `protect_*`(5)、功能引入 `feat_* shield_ready shield_block`(6)、被撞归因 `hit_*`(5)、里程碑 `ms_10 ms_25 ms_50 ms_100`、结算 `time_1–4 dodge_1–4 new_record restart_hint`、菜单系统 `second_run_ask menu_* help_recap settings_hint paused`
- voice 修订(R4):`menu_main` 改词重录为「菜单。单击切换选项,双击确认。」(对齐 round2-review 裁决②全球菜单约定)
- voice 已删除(R3):`num0–9 num_shi num_bai n_time n_sec n_dodge n_ge n_milestone intro1–4 hit1 hit2 gameover restart`(数字拼接与旧教学弃用);平铺旧文件全部移除
- sfx(12):`alarm boost crash dodge hit shield shield_block whoosh_down whoosh_left whoosh_right whoosh_up`
- bgm(2):`engine`(对局)+ R6 新增 `menu`(菜单/结算 pad)
### rpg《剑与声》(R4 新游戏第一章,台词依据 `docs/design/05-rpg-ch1-voice-ids.md` + `05-rpg-addendum.md`)
- voice 旁白双性别版(male/ 与 female/ 各 113 条,male=Uncle_Fu 说书人 / female=Serena 武侠故事):序章 `intro_1–3`、R6 新增首次战斗教学 `tut_battle_1–5`、系统状态 `sys_* help_* settings_hint st_*`、场景 `desc_*`(16)、选项 `opt_*`(18)、事件 `evt_*`(6)、战斗 `btl_* cmd_* tut_*`(27,含 R5 补录 `btl_half_bandit`)、商店 `shop_*`(7)、敌方档位 `foe_hp_high/mid/low`(addendum §6.2 补录)
- voice NPC 单音色平铺(14 条,落 `voice/` 根,引擎平铺回退):村长 `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)
- sfx(35):前摇 `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` + SYN `hurt flee`;探索 `chest drink_water rest door_heavy` + SYN `step coin levelup`;环境 `amb_village amb_path amb_fork amb_chest amb_stream amb_hunter amb_deepwood amb_gate amb_hall amb_swamp amb_peak`(5s 无缝循环,均值 -25dB);`ui_deny` 按设计不做
- bgm(6,Mureka):`village battle boss ending`(R4)+ R6 新增 `menu`(菜单 pad)与 `explore`(探索轻垫乐,10 文档 §7 恢复,volume 0.35);90s 无缝循环;`amb_*` 由游戏层手动 loop 接 sfx 总线
- 再生成方法见 `web/rpg/gen/README.md`
### radio《不眠频率》(批次 1 新游戏,叙事模式,台词依据 `docs/design/15-radio-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 103 条):**HOST 主播** 29 条(male=Uncle_Fu「低沉温和的中年男声,深夜电台主播,沉稳亲切,有磁性」/ female=Serena「温暖清晰的年轻女声,深夜电台主播,沉稳亲切,不甜腻」:开场 `b_open b_rain`、主播句 `z1_* l1_* k1_* w1_* h1_*` 主播行、心结 `d9_face d9_avoid`、结局 `e1–e4_a/b`)+ **PROD 导播/系统/向导** 74 条(male=Dylan / female=Vivian,instruct「贴近耳机的低语男/女声,年轻电台导播,冷静克制」:`gd_* sys_* prog_c1–5 rep_*`、导播行、抉择提示 `p1–p9`、尾声 `ep_*`)。同性别双 speaker 逐句覆盖见 `tools/gen_voice_dual.py` 的 `VOICE_SPK["radio"]`(同场景高频对话的两者永不同 speaker)。
- voice NPC 平铺(29 条,落 `voice/` 根,引擎平铺回退;**转码带通**见下):老周 7 条(z1_*,Uncle_Fu·苍老沙哑)、小鹿 4 条(l1_*,Serena·哭腔倔强)、糖糖 6 条(k1_*,Vivian·稚嫩童声)、陈姐 7 条(w1_*,Vivian·疲惫沙哑中年)、老韩 5 条(h1_*,Eric·沙哑粗犷司机)。
- **通话滤波(资产侧,15-radio.md §6.2)**:convert 转码时按来电者逐档 ffmpeg 带通+轻压缩(老周 500-2800 / 小鹿 400-3400 / 糖糖 450-3000 / 陈姐 420-3100 / 老韩 300-3400 Hz,均 `acompressor threshold=-20dB ratio=3`);参数在 `tools/gen_voice_dual.py` 的 `NPC_BANDPASS`,未滤波原声保留在 staging `tools/gen_voice_dual_wav/radio/npc/` 可重滤/回退。HOST/PROD 不滤波。**待人工试听**:滤波句可读性抽检,不可读句按「宁窄勿脏」回退未滤波原声(staging 重转即可)。
- sfx(15):`ui_confirm ui_menu`(SYN 程序合成兜底)+ **SA3 12 件**(`web/radio/gen/gen_sfx_sa3.py`,2026-09-02 补产,token 走 hf-mirror):`onair_sting line_connect line_drop arg_muffled brake_screech tape_static amb_rain_city amb_station amb_kid_room amb_street_rain amb_cab amb_studio` + `phone_ring`(**SYN→SA3 真铃声替换**,循环周期 5.2s 烘进文件、游戏侧 loop 接口零改动;原 SYN 备份 `tools/asset_fix_backup/sa3_ab_20260902/`)。`amb_studio` 文档 §5.2 有、game.js 未接线(直播间底噪由 bgm/onair 承担),产出备用。
- bgm(4,Mureka $0.12):`onair bridge ending`(-20 LUFS)+ `menu`(menu pad,-24 LUFS,10 文档 §1.2);90.00s 无缝循环;后处理脚本 `web/radio/gen/gen_bgm.sh`。
- 合计 254 ogg + 254 m4a(每游戏音频 = 235 voice + 15 sfx + 4 bgm);台词/生成/终检走 `tools/gen_voice_dual.py --game radio` 与 `tools/check_all_assets.py`。
### dungeon《回声地窟》(批次 1 新游戏,Roguelike 模式,台词依据 `docs/design/16-dungeon-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 125 条,无 NPC——怪物不说话):male=Uncle_Fu「低沉醇厚的男声,像探窟向导,沉稳有力」/ female=Serena「平静清晰的女声,像探窟向导,沉稳可信」,两常量全表统一。分组:序章/标题 4、教学 DRILL 19、系统/菜单/状态 35、探索事件 9、战斗 30、卡关/看门狗/纠错 14、结算/元进度 14。
- sfx(49 文件):批次 1 SYN 21 文件(`web/dungeon/gen/gen_sfx.py`:`pulse`、材质尾音 `mat_stone/door/stair/water`、**预 pan 立体声** `side_wall_l/r side_open_l/r`(mono 源 + ffmpeg pan 派生,能量只在单声道,极性脚本断言)、移动 `step_own step_turn bump`、拾取 `coin potion gear`、战斗 `atk_swing parry hurt`、`levelup`(D 小调五声上行钟声琶音)+ R2 新增 `amb_cave turn_tick`);批次 2 SYN 兜底 28 文件(`gen_sfx2.py`:`echo_1–4 stairs_down atk_hit enemy_die mob_step_{small,bug,heavy}(_l/_c/_r) tel_{small,bug,heavy}(_l/_r)`)已于 **2026-09-02 全部由 SA3 版同名替换**(`web/dungeon/gen/gen_sfx_sa3.py`,A-B 响度/时长对齐后晋级,echo 距离档 0.83<1.43<2.18<2.98s 递增保持;SYN 原版备份 `tools/asset_fix_backup/sa3_ab_20260902/dungeon/`)。
- bgm(4,Mureka $0.12):`menu explore battle boss`(全部 -20 LUFS,16-dungeon.md §9.1);90.00s 无缝循环;battle/boss 的 bpm 仅为 prompt 特征词、无节拍网格玩法,未跑 bpm_precise;后处理脚本 `web/dungeon/gen/gen_bgm.sh`。
- 合计 303 ogg + 303 m4a(250 voice + 49 sfx + 4 bgm;批次 1 表述 273 未计 R2 amb_cave/turn_tick 与批次 2 的 28 文件,本行已按实盘点修正);台词/生成/终检走 `tools/gen_voice_dual.py --game dungeon` 与 `tools/check_all_assets.py`。
### abyss《深海回音》(批次 2 新游戏,叙事模式,台词依据 `docs/design/17-abyss-voice-ids.md`)
- voice 双性别版(male/ 与 female/ 各 116 条 + key 变体各 11 条):**DIVER 潜航员(玩家)** 30 条(male=Uncle_Fu「低沉冷静的男声,深潜救援员,干练沉着,水下通讯的轻微气声」/ female=Serena「低沉冷静的年轻女声,…」:开场 `b_open`、行动句 `d1_* d2_* d3_* d4_* d9_* g9_knot`、结局 `e1–e4_a/b`)+ **DECK 母船调度/系统/向导** 86 条(male=Dylan / female=Vivian「清晰稳定的男/女声,母船潜水调度员,专业干脆,隔着耳机下达指令」:`gd_* sys_* prog_d1–4 oxy_* dry_*`、下潜/解读句 `dv1–dv4_*`、抉择提示 `p1–p9`(含单载 `p7_chen/p7_zheng`)、结算 `d*_surf/d*_supply`、尾声 `ep_*` 14 条)。同性别双 speaker 逐句覆盖见 `tools/gen_voice_dual.py` 的 `VOICE_SPK["abyss"]`(玩家与调度同场景永不同 speaker,radio HOST/PROD 同型)。
- voice NPC 平铺(21 条,落 `voice/` 根,引擎平铺回退;**转码带通**见下):小舟 5 条(z1_* + d1_log,Serena·年轻女声 23 岁声呐兵)、老白 4 条(bai_*,Uncle_Fu·沙哑爽朗轮机长)、陈医官 5 条(chen_*,Vivian·平静沙哑船医)、高船长 7 条(gao_*,Eric·低沉苍老船长)。**区分度风险中**:小舟与 female 玩家同 speaker、老白与 male 玩家同 speaker——靠年龄感/沙哑 instruct + 电台滤波区分,待人工试听(17b 头注)。
- **水声电台滤波(资产侧,17-abyss.md §5.3)**:convert 转码按船员逐档带通+轻压缩(小舟 420-3200 / 老白 350-3000 / 陈医官 400-3100 / 高船长 300-2800 Hz,均 `acompressor threshold=-20dB ratio=3`);参数在 `NPC_BANDPASS["abyss"]`,已验证生效(带内能量 47-62%→69-80%,>3.4kHz 高频占比 7% vs 未滤波 DECK 45%),未滤波原声保留在 staging 可重滤/回退(宁窄勿脏)。DIVER/DECK 不滤波(母船级音质)。
- sfx(19 文件):SYN 6 件(`web/abyss/gen/gen_sfx.py`:`sonar_ping`(1.4→0.9kHz chirp 220ms **-6dBFS 设计指定电平**)、`pipe_knock`(三短三长三短固定节拍,断言可数)、`link_beep`、`ascent_chime`、`ui_confirm ui_menu`)+ SA3 13 件(`web/abyss/gen/gen_sfx_sa3.py`,seed 20260909):`echo_metal_l/_r`(**预 pan 立体声**:mono 下混 + ffmpeg pan 派生,能量只在目标声道、极性断言,dungeon side_* 工艺——引擎无运行时 pan)、`echo_debris echo_groan static_burst spark_flash valve_close landslide surf_splash bell_toll`(one-shot)+ `amb_deep amb_deck breath_loop`(18s amb 床,只去直流不淡化,游戏层 buffer.loop,RMS -26/峰值帽 -8 先例)。
- bgm(4,Mureka $0.12):`deck dive comms ending`(全部 -20 LUFS——MENU 复用 deck 低响度淡入由游戏层控制);90.00s 无缝循环(mean -20.5~-21.9dB);dive 的 sonar-like pulse 仅为 prompt 特征词,未跑 bpm_precise;后处理脚本 `web/abyss/gen/gen_bgm.sh`。
- 合计 298 ogg + 298 m4a(voice 275 + sfx 19 + bgm 4);台词/生成/终检走 `tools/gen_voice_dual.py --game abyss` 与 `tools/check_all_assets.py`;两表一致闭环校验脚本 `/tmp/verify_batch2.py`(重解析 17b 文档逐字 diff,一次性,未入库)。
### detective《雨夜专案》(批次 2 新游戏,本格推理模式,台词依据 `docs/design/18-detective-voice-ids.md`)
- voice 旁白双性别版(male/ 与 female/ 各 96 条 + key 变体各 10 条):male=Uncle_Fu「低沉沉稳的男声,专案组探长,冷静克制,像在雨夜读卷宗」/ female=Serena「沉稳清晰的女声,…」,两常量全表统一(禁句级变体)。分组:G0 系统/菜单 11、G1 开场/教学 12、G2 状态/条目 20(`st_asked_0–6 st_doubt_0–4 item_* intro_w3`)、G3 现场勘验 6(探长自勘 `sc_*`)、G4 指证 8、G5 结案三问 18、G6 结算 9、G7 看门狗/卡关 12(`hint_a/b/c1/c2 b_hint_c1/c2 hint_fin recap_go`)、V 键盘变体 10。**句序号一律不播**(数字拼接禁令,交互侧落实)。
- voice NPC 平铺(52 条,落 `voice/` 根,**不加滤波**——区分度靠 speaker+instruct+游戏侧签名 earcon `sig_*` 前缀,18b 头注):老葛 7 条(w1_* + acc_ge,Eric·苍老沙哑守夜人)、小顺 16 条(w2_* acc_shun b_shun_1–4 b_shun_react_1–2 b_shun_break_1–3,Dylan·年轻清亮学徒)、周先生 17 条(z_1–6 z_react_1–4 acc_zhou z_break_1–3 b_zhou_1–3,Uncle_Fu·平板谨慎账房)、温太太 7 条(wen_* + acc_wen,Vivian·快嘴泼辣房东)、秦法医 5 条(fo_*,Serena·冷静干验收官)。**区分度风险中**:周先生与 male 旁白同 speaker、秦法医与 female 旁白同 speaker——靠 sig 前缀+instruct+语境兜底,待人工试听(18b 头注)。声音演技核心 `z_react_1–4`(记岔→支吾→拒答→想走)与 `z_break_1–3`(认罪三段)情绪全在句内文本(省略号/破折号)。
- sfx(12 文件):SYN 6 件(`web/detective/gen/gen_sfx.py`:签名 `sig_shun sig_wen sig_fore`、`contra_hit`(小二度金属相击+盖章尾,最强确认音 -4dBFS)、`contra_miss`(钝木鱼,非 error 音色)、`turn_tick`(880Hz 木鱼族,dungeon 配方自存))+ SA3 6 件(`web/detective/gen/gen_sfx_sa3.py`,seed 20260909):`paper_turn sig_ge sig_zhou sig_scene gavel rain_swell`(认罪链垫 7.2s,-10dBFS 压在 bgm/verdict 下)。签名 earcon 实测 0.78-1.28s(文档 0.3-0.5s 指引——两步+伞抖水类内容下限,超出已记录批次报告)。
- bgm(3,Mureka $0.09):`menu board verdict`(18-detective.md §8.1 明确全部 -20 LUFS;雨声底烤进曲目省第三声流);90.00s 无缝循环(mean -20.2~-21.7dB);后处理脚本 `web/detective/gen/gen_bgm.sh`。
- 合计 279 ogg + 279 m4a(voice 264 + sfx 12 + bgm 3);台词/生成/终检走 `tools/gen_voice_dual.py --game detective` 与 `tools/check_all_assets.py`。
### 批次 2 资产账(2026-09-09)
- abyss 148 句(双性别 127 含 key 11 对 ×2 + NPC 平铺 21)= 275 voice 资产;detective 158 句(旁白 106 含 key 10 对 ×2 + NPC 平铺 52)= 264。两游戏合计 1154 文件(ogg+m4a)+ 2 cover。
- GPU 串行(flock):abyss male/female/key/npc 与 detective male/female/key/npc + SA3 两批共 3 轮,两游戏 `--check` 全绿(无时长离群/短句)。
- Mureka 7 任务 $0.21(台账见 `tools/mureka_log.md` 2026-09-09 批次 2 节),全部一次成功;项目累计 $1.08/$2.00。
- 台词两表一致闭环校验:一次性脚本重解析 17b/18b 文档 vs `gen_voice_dual.py` 逐字 diff PASS(148/158 句、key 11/10 对、NPC 21/52 全对齐,账目 275/264 音频条数与文档合计一致)。
- 音色分配表新增:abyss(双性别 DIVER=Uncle_Fu/Serena + DECK=Dylan/Vivian 双配对 + NPC 平铺 4 音色)、detective(旁白 Uncle_Fu/Serena + NPC 平铺 5 音色满配)。
- sfx 真峰值(逐声道解码回读)全部 ≤ -3dBFS、|直流| ≤ 0.001(SYN 首轮即抓出 link_beep.m4a AAC 过冲 -2.82dBFS,迭代补 volume 修复;SA3 超限自动补偿未触发)。
- check_all_assets 10 游戏全绿(exit=0):abyss 298/298、detective 279/279,双性别集合一致 + key 变体两性别一致且 ⊆ 主集。
### 批次 1 资产账(2026-09-01)
- radio 132 句(双性别 103 ×2 + NPC 平铺 29)= 235 voice 资产;dungeon 125 句 ×2 = 250。两游戏合计 970 文件(ogg+m4a)。
- GPU 串行(flock):radio male/female/npc 与 dungeon male/female 共 5 轮,`--check` 全绿(无时长离群/短句)。
- Mureka 8 任务 $0.24(台账见 `tools/mureka_log.md` 2026-09-01 节),全部一次成功。
- 音色分配表新增:radio(双性别 HOST=Uncle_Fu/Serena + PROD=Dylan/Vivian 双配对 + NPC 平铺 5 音色)、dungeon(Uncle_Fu/Serena)。
- sfx 真峰值(逐声道解码回读)全部 ≤ -3dBFS、|直流| ≤ 0.001、无边界爆豆(源 8ms cos² 淡入淡出 + 垫音 + hp30 工艺,`web/<game>/gen/gen_sfx.py` 内建 QC)。
## 响度与爆音标准(R6 起)
- sfx one-shot:峰值归一 **-3dBFS**(真峰值经 ogg 解码回读校验,见 round6-report §1);首尾 8ms cos² 淡入淡出;去直流。
- loop(amb_*/bgm):首尾交叉淡化保证循环连续,不加淡入淡出;仅做直流/峰值检查。
- voice:沿用 R1 峰值 0.89 归一策略,不动。
- bgm:loudnorm -20 LUFS(主题曲)/ -24 LUFS(menu pad)。
## 发音质量
### 本轮已采取的规避措施
- 数字类语音(num_0~9、shi、bai、第、轮、分、秒、颗等)一整批同 instruct 连续生成,减少拼接 prosody 漂移(反馈⑥根因之一)。
- 台词 >40 字按句拆分生成再拼接(句间 0.12s 静音),避免长句吞字。
- 每条 assert 时长 >0.3s、峰值 >0.05,统一峰值归一 0.89;同句两性时长比 >3 判离群并重生成。
### 多音字/发音风险清单(待人工试听确认)
以下条目为文本层面的已知风险点,本轮生成保留原文;如试听发现误读,建议按右栏换写法重生成(改 `tools/gen_voice_dual.py` 台词表):
| 位置 | 原文 | 风险 | 建议换写法 |
|---|---|---|---|
| storyline help | 双击:重听刚才的台词 | 「重」可能读 zhòng | 「双击:重新听刚才的台词」 |
| storyline n11_child / n13_leave / n16b | 数到一千、数数 | 「数」shǔ/shù | 误读时写「数一数,数到一千」 |
| storyline n05_bcast / n19_betray | 三、七点、五 | 坐标需逐字读 | 误读时写「三,七,点,五」 |
| storyline n16b | 数到一百七 | 可能读成「一百七十个」 | 写「数到一百七十」 |
| 多处(escape/simon/space/storyline) | 还(hái)在/还有/还能 | 「还」hái/huán | 误读时改写句子避开 |
| rhythm welcome | S / A / B / C 评级 | 字母发音 | 现行文本为「评级,S!」,试听确认字母读音 |
(本表为文本审查结果;时长离群自动检查已通过的部分见 round1-report,最终发音准确性需人工试听把关。)