配对码与认领(B): - POST /api/pair/start|join:6 位码 10 分钟单次有效、仅存内存零泄露面、5 连错 per-IP 封锁 10 分钟;join=新设备档案按桶 LWW 并入老档案+token 改绑(复用 claim-merge);日志脱敏 - 大厅:生成配对码(speechSynthesis 逐位朗读+aria-live+重听)/从其他设备转入(one-time-code 输入框)/从本机移除/401 过期自愈引导/aria 补全/玩家名可听化 - api-smoke 12/12(配对全流程/频控/封锁/过期自愈/移除/digitsToCn)+ CDP 真浏览器 E2E 22/22 键盘语音双套资产(A,路线 a): - 164 变体句(8 游戏 grep 实测,超出调研预估 153:含轻触/点两下/按住变体)×2 性别=328 生成 656 文件 36.9 分钟;触屏主资产零字节改动(PCM 逐样本比对后还原) - 引擎 _candidates 三跳路由 key→gender→平铺(inputMode 跟随);缓存键 mode|gender|id;engine-input 新增 K9 路由断言(72 条) - check_all_assets 增 key 列(两性别一致且 ⊆ 主集)8 游戏全绿;voice_text.json 增 __key__ 表;live control.mjs key 会话对照键盘措辞验收(集成) - voice-ids 文档:8 游戏键盘变体小节由 KEY_LINES 程序化生成(与台词表逐字断言一致);补齐 storyline/escape/simon 三个历史缺失文档;design README 增 new8 索引 - mock 适配:playtest persona 加 maxTouchPoints=1 保持触屏链断言语义零改动 回归:12 套件全绿(8 playtest + guide 122 + engine-voice 19 + engine-input 72 + api-smoke 12/12) 同批入库:批次 2/3 已完稿设计文档(17-abyss/18-detective/19-cipher 全套,20-22 在途)
211 lines
12 KiB
Markdown
211 lines
12 KiB
Markdown
# 05b · 《剑与声》第一章语音台词表(voice ids,R4 录音依据)
|
||
|
||
> **给音频总监的录制说明**
|
||
> - **旁白**(A/S/D/O/E/B/SH 组,104 句):双性别。**female = Serena,male = Uncle_Fu**(新游戏,沿用 R1 分配惯例)。落 `web/rpg/audio/voice/female|male/<id>.{ogg,m4a}`。
|
||
> - female instruct 常量:`平静清晰的年轻女声,像在讲武侠故事`
|
||
> - male instruct 常量:`低沉醇厚的男声,像说书人,平静有韵味`
|
||
> - **NPC**(N 组,16 句):单音色、不做双性别,平铺落 `web/rpg/audio/voice/<id>.{ogg,m4a}`(引擎平铺回退命中,同 storyline 角色台词模式)。同一角色 speaker+instruct 恒定:
|
||
> - 村长:`Uncle_Fu` + `慈祥和缓的老者`
|
||
> - 老猎人:`Eric` + `沙哑粗犷,豪爽中带着暖意`
|
||
> - 寨丁头目:`Dylan` + `凶狠粗鲁,大声喝骂`
|
||
> - 黑风寨主:`Uncle_Fu` + `低沉阴狠,慢条斯理`(与村长同 speaker 不同 instruct,参照 storyline 先例;两者从不在同场景出现,请试听确认区分度)
|
||
> - 主角沈听澜**无台词**:旁白第二人称("你")叙述,省一套主角音色。
|
||
> - 数字规避:等级/血量/金币全部分档整句;价格写死在商店句里;无运行时拼接。
|
||
> - 管线:`tools/gen_voice_dual.py` 照录;多音字已规避("重听"写作"重新听")。
|
||
|
||
## A 组 · 序章(旁白 ×3)
|
||
|
||
| id | 台词全文 |
|
||
|---|---|
|
||
| `intro_1` | 你的眼睛看不见了。但你的耳朵,比谁都灵。 |
|
||
| `intro_2` | 黑风寨掳走了你唯一的徒弟。追进迷雾林,把他们连根拔起。 |
|
||
| `intro_3` | 先记住,怎么用耳朵走路。 |
|
||
|
||
## S 组 · 系统/菜单/状态(旁白 ×28)
|
||
|
||
| id | 台词全文 | 触发 |
|
||
|---|---|---|
|
||
| `sys_continue_ask` | 检测到你的旅程记录。单击继续,右滑开始新的旅程。 | 有存档进游戏 |
|
||
| `sys_new_game` | 新的旅程,开始了。 | 新游戏 |
|
||
| `sys_saved` | 进度已保存。 | 存档写入后 |
|
||
| `sys_rest` | 你在篝火边睡了一觉,状态全满。 | village 休息 |
|
||
| `sys_drink` | 溪水清冽,你喝了个饱,伤势尽消。 | stream 饮水 |
|
||
| `sys_menu` | 菜单。左右滑选择,单击确认。 | 下滑呼出 |
|
||
| `sys_menu_resume` | 继续旅程。 | 菜单项 |
|
||
| `sys_menu_save` | 保存并回大厅。 | 菜单项 |
|
||
| `sys_menu_help` | 重新听帮助。 | 菜单项 |
|
||
| `help_explore` | 左右滑切换选项,单击确认。双击重新听场景,上滑查看状态,下滑打开菜单。 | 帮助 |
|
||
| `help_battle` | 战斗中,左右滑选招式,单击出手。听到敌人的前摇,双击格挡。 | 帮助 |
|
||
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内 |
|
||
| `st_hp_high` | 你状态很好。 | 血量 >70% |
|
||
| `st_hp_mid` | 你受了伤。 | 30~70% |
|
||
| `st_hp_low` | 你伤势很重,命悬一线。 | <30%(附带 warning 震动) |
|
||
| `st_gold_poor` | 口袋空空。 | 金币 <30 |
|
||
| `st_gold_some` | 有些积蓄。 | 30~150 |
|
||
| `st_gold_rich` | 腰包鼓鼓。 | >150 |
|
||
| `st_lv_low` | 你初出茅庐。 | lv 1-2 |
|
||
| `st_lv_mid` | 你小有名气。 | lv 3-5 |
|
||
| `st_lv_high` | 你已是高手。 | lv 6+ |
|
||
| `st_weapon_none` | 你赤手空拳。 | 无武器 |
|
||
| `st_weapon_iron` | 你手持铁剑。 | iron_sword |
|
||
| `st_weapon_steel` | 你手持青钢剑。 | steel_sword |
|
||
| `st_weapon_wind` | 你手持听风剑。 | wind_sword |
|
||
| `st_armor_none` | 你身无片甲。 | 无护甲 |
|
||
| `st_armor_leather` | 你身着皮甲。 | leather |
|
||
| `st_armor_iron` | 你身着铁鳞甲。 | iron_scale |
|
||
|
||
## D 组 · 场景描述(旁白 ×16)
|
||
|
||
| id | 台词全文 |
|
||
|---|---|
|
||
| `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` | 聚义厅。火盆熊熊,大厅空旷,回声冰冷。 |
|
||
|
||
## O 组 · 选项名(旁白 ×18)
|
||
|
||
| id | 台词全文 |
|
||
|---|---|
|
||
| `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` | 离开。 |
|
||
|
||
## E 组 · 事件(旁白 ×6)
|
||
|
||
| id | 台词全文 |
|
||
|---|---|
|
||
| `evt_gold15` | 你在落叶下摸到十五枚金币。 |
|
||
| `evt_nothing` | 这里什么都没有了。 |
|
||
| `evt_chest` | 树洞里有两瓶金疮药,你收好了。 |
|
||
| `evt_hunter_gift` | 老猎人塞给你一瓶金疮药,还说商店会给你算便宜些。 |
|
||
| `evt_gate_open` | 寨门缓缓打开。 |
|
||
| `evt_ch1_end` | 寨主倒了,但徒弟不在这里。一张字条,指向南方的腐沼。 |
|
||
|
||
## B 组 · 战斗(旁白 ×26)
|
||
|
||
| id | 台词全文 | 触发 |
|
||
|---|---|---|
|
||
| `btl_start_wolf` | 野狼拦路! | 遭遇狼 |
|
||
| `btl_start_bandit` | 山贼围上来了! | 遭遇山贼 |
|
||
| `btl_start_spider` | 毒蛛从树上垂了下来! | 遭遇毒蛛 |
|
||
| `btl_start_elite` | 寨丁头目挡住了去路! | 遭遇头目 |
|
||
| `btl_start_boss1` | 黑风寨主,就在你面前。 | Boss 战 |
|
||
| `cmd_attack` | 攻击。 | 指令 |
|
||
| `cmd_skill` | 破空斩。 | 指令 |
|
||
| `cmd_defend` | 防御。 | 指令 |
|
||
| `cmd_item` | 金疮药。 | 指令 |
|
||
| `btl_nomp` | 内劲不足。 | mp<3 选技能 |
|
||
| `btl_noitem` | 没有金疮药了。 | 无药选道具 |
|
||
| `btl_flee` | 你抽身退出了战斗。 | 逃跑成功 |
|
||
| `btl_noflee` | 避无可避! | Boss/剧情战逃跑 |
|
||
| `btl_enemy_die` | 敌人倒下了。 | 击杀 |
|
||
| `btl_win` | 战斗胜利。 | 胜利 |
|
||
| `btl_loot_small` | 小有收获。 | 战利 exp+gold <15 |
|
||
| `btl_loot_mid` | 收获不少。 | 15~40 |
|
||
| `btl_loot_big` | 大获全胜,收获颇丰。 | >40 |
|
||
| `btl_levelup` | 你的修为精进了。 | 升级(success 震动) |
|
||
| `btl_lose` | 你倒下了,黑暗吞没了一切。 | 战败 |
|
||
| `btl_lose_hint` | 记住,听清前摇,双击格挡。 | 战败提示 |
|
||
| `tut_b1` | 它要扑了,听前摇! | 教学战 |
|
||
| `tut_b2` | 就是现在,双击格挡! | 教学战 |
|
||
| `tut_b3` | 挡住了!轮到你了。左右滑选攻击,单击出剑。 | 教学战 |
|
||
| `tut_b4` | 没挡住也没关系,再来一次。 | 教学战格挡失败 |
|
||
| `tut_b5` | 好剑法!接下来,靠你自己了。 | 教学战结束 |
|
||
|
||
## SH 组 · 商店(旁白 ×7)
|
||
|
||
| id | 台词全文 |
|
||
|---|---|
|
||
| `shop_open` | 商店。左右滑看看货,单击购买。 |
|
||
| `shop_price_sword` | 铁剑,一百金。 |
|
||
| `shop_price_armor` | 皮甲,八十金。 |
|
||
| `shop_price_potion` | 金疮药,三十金。 |
|
||
| `shop_owned` | 这件你已经有了。 |
|
||
| `shop_poor` | 钱不够。 |
|
||
| `shop_buy` | 买下了。 |
|
||
|
||
## N 组 · NPC(单音色平铺 ×16)
|
||
|
||
| id | 角色 | 台词全文 |
|
||
|---|---|---|
|
||
| `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` | 黑风寨主 | 白无瞳……会找到你…… |
|
||
|
||
---
|
||
|
||
**合计:旁白 104 句 × 2 性别 + NPC 16 句 = 224 条音频**(×2 格式 = 448 文件)。对话功能与语气大纲对照见 [05-rpg.md](05-rpg.md) §5.3,场景/战斗触发逻辑见 [05-rpg-chapter1.md](05-rpg-chapter1.md)。
|
||
---
|
||
|
||
## 键盘变体(key,P1 输入平权路线 a,16 句)
|
||
|
||
「生效输入模式=键盘」(settings.input=key,或 auto 且键盘在跟/纯桌面初始判定,
|
||
web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载
|
||
`web/rpg/audio/voice/<gender>/key/<id>.{ogg,m4a}`,变体缺失回退主资产——触屏措辞零改动。
|
||
>
|
||
> 措辞规范(02-input-parity.md §4.3 路线 a + P1 裁定):向左滑→按左方向键(四向同理,
|
||
> WASD 不进台词);单击/轻触屏幕→按空格;双击→按回车;按住/长按→按住空格;
|
||
> 复合短语(左右滑→左右方向键、滑动→方向键)按语义等价展开;只改操作词,其余
|
||
> 内容一字不动,不新增「重」类多音字。本表与 `tools/gen_voice_dual.py` 的
|
||
> `KEY_LINES` 逐字一致(两表一致铁律:改一处必改另一处)。
|
||
> 资产:×2 性别 = 16×2 条、×2 格式 = 16×4 文件;管线 `gen_voice_dual.py --only-variants`
|
||
> 生成 → `--convert` 落盘,终检 `tools/check_all_assets.py`(key 两性别一致且 ⊆ 主集)。
|
||
|
||
| id | 键盘台词全文(触屏原句见本表上方对应 id) |
|
||
|---|---|
|
||
| `sys_continue_ask` | 检测到你的旅程记录。按空格继续,按右方向键开始新的旅程。 |
|
||
| `sys_menu` | 菜单。左右方向键选择,按空格确认。 |
|
||
| `help_explore` | 左右方向键切换选项,按空格确认。按回车重新听场景,按上方向键查看状态,按下方向键打开菜单。 |
|
||
| `help_battle` | 战斗中,左右方向键选招式,按空格出手。听到敌人的前摇,按回车格挡。 |
|
||
| `btl_lose_hint` | 记住,听清前摇,按回车格挡。 |
|
||
| `tut_b2` | 就是现在,按回车格挡! |
|
||
| `tut_b3` | 挡住了!轮到你了。左右方向键选攻击,按空格出剑。 |
|
||
| `shop_open` | 商店。左右方向键看看货,按空格购买。 |
|
||
| `skip_hint` | 按空格可跳过旁白。 |
|
||
| `tut_battle_2` | 左右方向键切换招式,攻击、破空斩、防御、金疮药。按空格,出手。 |
|
||
| `tut_battle_3` | 敌人出手前有一声前摇。听到前摇,马上按回车,就能格挡。 |
|
||
| `tut_battle_5` | 记住:听清前摇,按回车格挡。开始吧! |
|
||
| `tut_b0` | 战斗里,左右方向键选招式,按空格出手。听到这个声音,就是你的回合。先按一按方向键,试试。 |
|
||
| `tut_b6` | 来不及格挡,就选防御。左右方向键,选防御,按空格。 |
|
||
| `gd_parry_miss` | 前摇声起的时候按回车,才能格挡。 |
|
||
| `gd_stall` | 想好了吗?左右方向键选择,按空格出手。 |
|