Files
SoundGame/docs/design/04-space-voice-ids.md
T
xsl 566241e05d feat(platform/P1): 配对码跨设备 + 认领打磨 + 键盘语音双套资产(两 agent 并行 + 集成收口)
配对码与认领(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 在途)
2026-09-10 00:43:23 +08:00

148 lines
9.1 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.
# 04a · 《盲航》重构版语音台词表(voice ids,R4 录音依据)
> **给音频总监的录制说明**
> - 设计依据:[04-space-rebuild.md](04-space-rebuild.md)。闪避为**同向**(左来左滑),台词已全部按此写死,不存在反向表述。
> - 旁白双性别:**female = Serena,male = Uncle_Fu**(R1 音色分配表)。落 `web/space/audio/voice/female|male/<id>.{ogg,m4a}`。
> - instruct 全表统一(同游戏同 instruct,00 文档 §3.2):
> - female(Serena):`平静清晰的女声,像飞船领航员,沉稳可信`
> - male(Uncle_Fu):`低沉醇厚的男声,像飞船领航员,沉稳有力`
> - 演练的紧迫感靠台词文案表达,instruct 不变。
> - 全部整句、无数字拼接:方位/次数/存活时间/躲避数全部按句写死或分档。
> - 多音字已规避("重新听"不写"重听";无"撞着/着陆"类风险)。
> - 管线:`tools/gen_voice_dual.py` 照录本表。**本表全量替换 R1 生成的 space 语音**(旧 id 见表末映射)。
## D 组 · 交互式演练(14 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `drill_welcome` | 欢迎登上盲航。你只有一双耳朵。 | D0 |
| `drill_rule` | 陨石来了,会有声音告诉你方位。 | D0 |
| `drill_left` | 听,左边有陨石。向左滑,把它拨开! | D1 |
| `drill_right` | 这次在右边。向右滑! | D2 |
| `drill_up` | 上面有东西,声音又尖又高。向上滑! | D3 |
| `drill_down` | 下面是低沉的轰隆。向下滑! | D4 |
| `drill_good` | 漂亮。 | 演练做对(D1/D3 播) |
| `drill_retry_left` | 那是左边来的,向左滑。 | D1 做错重教 |
| `drill_retry_right` | 那是右边来的,向右滑。 | D2 做错重教 |
| `drill_retry_up` | 声音又高又尖,是上面,向上滑。 | D3 做错重教 |
| `drill_retry_down` | 轰隆声在下面,向下滑。 | D4 做错重教 |
| `drill_moveon` | 没关系,跟着我,我们继续。 | 同一步失败 2 次自动带过 |
| `drill_done` | 四个方向你都会了。引擎点火,出发! | D5 |
| `drill_skip` | 跳过演练,直接出发。 | 下滑跳过 |
## P 组 · 保护期(5 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `protect_left` | 训练护盾接住了。那颗在左边,听到左边的呼啸,向左滑。 | 保护期被撞(左) |
| `protect_right` | 训练护盾接住了。那颗在右边,听到右边的呼啸,向右滑。 | 保护期被撞(右) |
| `protect_up` | 训练护盾接住了。那颗在上面,听到高高的呼啸,向上滑。 | 保护期被撞(上) |
| `protect_down` | 训练护盾接住了。那颗在下面,听到低沉的轰隆,向下滑。 | 保护期被撞(下) |
| `protect_end` | 训练护盾关闭。接下来,靠你自己了。 | 第 60 秒 |
## F 组 · 单击/双击分批引入(6 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `feat_boost` | 试试单击,引擎会短促加速,直接冲过空隙。 | 第 20 秒引入 |
| `feat_boost_done` | 感觉到了吗?加速的时候,陨石撞不上你。 | 单击后确认 |
| `feat_shield` | 双击展开护盾,能挡下一次撞击。 | 第 45 秒引入 |
| `feat_shield_done` | 护盾展开后会自动充能,好了我会告诉你。 | 双击后确认 |
| `shield_ready` | 护盾充能完毕。 | 30 秒冷却结束(沿用 R1 id,重录) |
| `shield_block` | 护盾挡下了撞击。 | 护盾生效(沿用 R1 id,重录) |
## H 组 · 被撞归因(5 句,保护期后)
| id | 台词全文 | 触发 |
|---|---|---|
| `hit_left` | 左边撞上的。听到左边的呼啸,向左滑。 | 第 1/2 次被撞(左) |
| `hit_right` | 右边撞上的。听到右边的呼啸,向右滑。 | 右 |
| `hit_up` | 上面撞上的。听到高高的呼啸,向上滑。 | 上 |
| `hit_down` | 下面撞上的。听到低沉的轰隆,向下滑。 | 下 |
| `hit_last` | 船体只剩最后一次了,小心! | 第 2 次被撞后接在方位句后 |
## M 组 · 里程碑(4 句)
| id | 台词全文 | 触发(躲过数) |
|---|---|---|
| `ms_10` | 十颗了,稳。 | 10 |
| `ms_25` | 二十五颗,老练的飞行员。 | 25 |
| `ms_50` | 五十颗,传奇。 | 50 |
| `ms_100` | 一百颗!天空属于你。 | 100 |
## R 组 · 结算(10 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `time_1` | 不到三十秒,再试一次。 | 存活 <30s |
| `time_2` | 超过三十秒,有进步。 | 30~60s |
| `time_3` | 超过一分钟,合格的飞行员。 | 60~120s |
| `time_4` | 超过两分钟,王牌飞行员。 | ≥120s |
| `dodge_1` | 只拨开几颗。 | 躲过 <5 |
| `dodge_2` | 拨开了十来颗。 | 5~14 |
| `dodge_3` | 拨开了几十颗。 | 15~49 |
| `dodge_4` | 拨开了一大群,漂亮。 | ≥50 |
| `new_record` | 新纪录! | 破纪录(插在 time_* 后) |
| `restart_hint` | 单击再飞一次,下滑回大厅。 | 结算尾 |
## Y 组 · 菜单与系统(8 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `second_run_ask` | 上滑重新听演练,单击直接出发。 | 二周目开场 |
| `menu_main` | ~~菜单。左右滑选择,单击确认。~~ → **勘误(R 终审)**:菜单约定已改(00 §5.2),以音频重录版"菜单。单击切换,双击确认。"为准。 | 下滑呼出 |
| `menu_resume` | 继续飞行。 | 菜单项 |
| `menu_lobby` | 回大厅。 | 菜单项 |
| `menu_help` | 重新听教学要点。 | 菜单项 |
| `help_recap` | 左边来向左滑,右边来向右滑,上面来向上滑,下面来向下滑。单击加速,双击护盾。 | 帮助重听(>25 字,生成期拆两句拼接:句 1 四方位,句 2 单击双击) |
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内 |
| `paused` | 已暂停。 | 菜单打开时 |
---
**合计 52 句 × 2 性别 = 104 条**(×2 格式 = 208 文件)。
旧 id 处置:R1 生成的 `num*/n_*/intro1-4/hit1/hit2/gameover/restart` 全部弃用(数字拼接与旧教学);`shield_ready`/`shield_block` 沿用 id 重录。平铺旧文件按 R1 约定在切换验证后统一清理。
---
## 键盘变体(key,P1 输入平权路线 a,24 句)
「生效输入模式=键盘」(settings.input=key,或 auto 且键盘在跟/纯桌面初始判定,
web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载
`web/space/audio/voice/<gender>/key/<id>.{ogg,m4a}`,变体缺失回退主资产——触屏措辞零改动。
>
> 措辞规范(02-input-parity.md §4.3 路线 a + P1 裁定):向左滑→按左方向键(四向同理,
> WASD 不进台词);单击/轻触屏幕→按空格;双击→按回车;按住/长按→按住空格;
> 复合短语(左右滑→左右方向键、滑动→方向键)按语义等价展开;只改操作词,其余
> 内容一字不动,不新增「重」类多音字。本表与 `tools/gen_voice_dual.py` 的
> `KEY_LINES` 逐字一致(两表一致铁律:改一处必改另一处)。
> 资产:×2 性别 = 24×2 条、×2 格式 = 24×4 文件;管线 `gen_voice_dual.py --only-variants`
> 生成 → `--convert` 落盘,终检 `tools/check_all_assets.py`(key 两性别一致且 ⊆ 主集)。
| id | 键盘台词全文(触屏原句见本表上方对应 id) |
|---|---|
| `drill_left` | 听,左边有陨石。按左方向键,把它拨开! |
| `drill_right` | 这次在右边。按右方向键! |
| `drill_up` | 上面有东西,声音又尖又高。按上方向键! |
| `drill_down` | 下面是低沉的轰隆。按下方向键! |
| `drill_retry_left` | 那是左边来的,按左方向键。 |
| `drill_retry_right` | 那是右边来的,按右方向键。 |
| `drill_retry_up` | 声音又高又尖,是上面,按上方向键。 |
| `drill_retry_down` | 轰隆声在下面,按下方向键。 |
| `protect_left` | 训练护盾接住了。那颗在左边,听到左边的呼啸,按左方向键。 |
| `protect_right` | 训练护盾接住了。那颗在右边,听到右边的呼啸,按右方向键。 |
| `protect_up` | 训练护盾接住了。那颗在上面,听到高高的呼啸,按上方向键。 |
| `protect_down` | 训练护盾接住了。那颗在下面,听到低沉的轰隆,按下方向键。 |
| `feat_boost` | 试试按空格,引擎会短促加速,直接冲过空隙。 |
| `feat_shield` | 按回车展开护盾,能挡下一次撞击。 |
| `hit_left` | 左边撞上的。听到左边的呼啸,按左方向键。 |
| `hit_right` | 右边撞上的。听到右边的呼啸,按右方向键。 |
| `hit_up` | 上面撞上的。听到高高的呼啸,按上方向键。 |
| `hit_down` | 下面撞上的。听到低沉的轰隆,按下方向键。 |
| `restart_hint` | 按空格再飞一次,按下方向键回大厅。 |
| `second_run_ask` | 按上方向键重新听演练,按空格直接出发。 |
| `menu_main` | 菜单。按空格切换选项,按回车确认。 |
| `help_recap` | 左边来按左方向键,右边来按右方向键,上面来按上方向键,下面来按下方向键。按空格加速,按回车护盾。 |
| `skip_hint` | 按空格可跳过旁白。 |
| `gd_hit_hint` | 被撞了。听方位,按对应方向键就能拨开。 |