Files
SoundGame/docs/design/03-rhythm-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

99 lines
6.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.
# 03a · 《节拍行者》语音台词表(voice ids,R3 录音依据)
> **给音频总监的录制说明**
> - 旁白双性别:**female = Vivian,male = Uncle_Fu**(R1 音色分配表,docs/audio/round1-report.md §4)。每句两个性别各录一条,分别落 `web/rhythm/audio/voice/female/<id>.{ogg,m4a}` 与 `.../male/`。
> - instruct 全表统一(同游戏同 instruct,00 文档 §3.2):
> - female(Vivian):`活力清晰的年轻女声,像节奏游戏主持人,情绪饱满但不夸张`
> - male(Uncle_Fu):`低沉醇厚的男声,像节奏游戏主持人,平稳有力`
> - 全表只用这两条 instruct 常量,逐句不换。特例单独标注。
> - 管线:`tools/gen_voice_dual.py` 台词表照录本文件;多音字已规避(无"重听/银行/长短"类风险词)。
> - 准确率按 S/A/B/C 四档直接写进评级句(设计定:档位即评级语义,不另设 90+/80+ 分档句,避免与评级割裂)。
> - id 沿用现版的:`grade_s/a/b/c`、`restart`(文案变更需重录覆盖);其余全部新增。现版 `welcome/rules/tut_start/tut_done` 弃用。
## W 组 · 开场与流程(8 句)
| id | 台词全文 | 备注 |
|---|---|---|
| `welcome` | 欢迎来到节拍行者。跟着音乐,我奏一句,你跟一句。 | 首次进游戏 |
| `welcome_back` | 欢迎回来。我奏一句,你跟一句。 | 二周目起 |
| `tut_1` | 听,底鼓。在下一小节的同一个位置,单击。 | 教学步 1 |
| `tut_2` | 这次是左和右。跟着打,左滑,右滑。 | 教学步 2 |
| `tut_3` | 最后一句,三个音,中间是双击。 | 教学步 3 |
| `tut_done` | 很好,演出开始。 | 教学通过,进曲目一 |
| `tut_skip` | 跳过教学,直接开始。 | 下滑跳过 |
| `mid_song` | 过半了,保持。 | 每首过半播一次 |
## C 组 · 教学纠正(5 句)
| id | 台词全文 | 触发 |
|---|---|---|
| `retry_early` | 早了,等鼓点再出手。 | 教学/练习中 dt < -GOOD |
| `retry_late` | 晚了,跟着鼓点走。 | dt > +GOOD |
| `retry_gesture` | 不是这个手势,再听一遍。 | 手势错 |
| `retry_listen` | 再听一遍,跟着来。 | 重播领奏前 |
| `retry_skip` | 没关系,我们先走下一句。 | 同一步失败 2 次跳过 |
## S 组 · 选曲与解锁(7 句)
| id | 台词全文 | 备注 |
|---|---|---|
| `select_hint` | 左右滑选曲目,单击开始,下滑回大厅。 | 进选曲界面 |
| `song1_name` | 第一首,启程,九十拍。 | 曲目一 |
| `song2_name` | 第二首,追风,一百零五拍。 | 曲目二 |
| `song3_name` | 第三首,星爆,一百二十拍。 | 曲目三 |
| `song_locked` | 这首还没解锁。上一首拿到 B 级以上就能解锁。 | 选中未解锁曲 |
| `unlock_song2` | 新曲目解锁,追风! | 曲目一 ≥B |
| `unlock_song3` | 新曲目解锁,星爆! | 曲目二 ≥B |
## G 组 · 结算(6 句)
| id | 台词全文 | 备注 |
|---|---|---|
| `grade_s` | S 级!准确率超过九成五,完美演出。 | 沿用 id,文案变更重录 |
| `grade_a` | A 级!准确率超过八成五,非常出色。 | 同上 |
| `grade_b` | B 级,准确率超过七成。不错,还能更好。 | 同上 |
| `grade_c` | C 级,准确率不到七成。别灰心,再来一遍。 | 同上 |
| `new_best_combo` | 新连击纪录! | bestCombo 刷新时插在评级句后 |
| `restart_hint` | 单击再来一遍,右滑下一首,下滑回大厅。 | 沿用 id `restart`,文案变更重录 |
## M 组 · 菜单与规则(5 句)
| id | 台词全文 | 备注 |
|---|---|---|
| `rules` | 规则:我奏一句,你在下一小节原样跟打。音要对,拍点也要对。 | 上滑重听规则 |
| `settings_hint` | 音色、语速、背景音乐,请回大厅修改。 | 菜单内播设置 |
| `menu_main` | ~~菜单。左右滑选择,单击确认。~~ → **勘误(R 终审)**:菜单约定已改(00 §5.2),以音频重录版"菜单。单击切换,双击确认。"为准。 | 下滑呼出 |
| `menu_resume` | 继续演奏。 | 菜单项 |
| `menu_lobby` | 回大厅。 | 菜单项 |
---
**合计 31 句 × 2 性别 = 62 条**(其中 grade_*、restart 为重录覆盖)。无数字拼接:拍数(九十/一百零五/一百二十)与准确率档位全部写死在整句里。
---
## 键盘变体(key,P1 输入平权路线 a,9 句)
「生效输入模式=键盘」(settings.input=key,或 auto 且键盘在跟/纯桌面初始判定,
web/engine/gesture.js inputMode())时,引擎 voice 候选链前置加载
`web/rhythm/audio/voice/<gender>/key/<id>.{ogg,m4a}`,变体缺失回退主资产——触屏措辞零改动。
>
> 措辞规范(02-input-parity.md §4.3 路线 a + P1 裁定):向左滑→按左方向键(四向同理,
> WASD 不进台词);单击/轻触屏幕→按空格;双击→按回车;按住/长按→按住空格;
> 复合短语(左右滑→左右方向键、滑动→方向键)按语义等价展开;只改操作词,其余
> 内容一字不动,不新增「重」类多音字。本表与 `tools/gen_voice_dual.py` 的
> `KEY_LINES` 逐字一致(两表一致铁律:改一处必改另一处)。
> 资产:×2 性别 = 9×2 条、×2 格式 = 9×4 文件;管线 `gen_voice_dual.py --only-variants`
> 生成 → `--convert` 落盘,终检 `tools/check_all_assets.py`(key 两性别一致且 ⊆ 主集)。
| id | 键盘台词全文(触屏原句见本表上方对应 id) |
|---|---|
| `tut_1` | 听,底鼓。在下一小节的同一个位置,按空格。 |
| `tut_2` | 这次是左和右。跟着打,按左方向键,按右方向键。 |
| `tut_3` | 最后一句,三个音,中间是按回车。 |
| `select_hint` | 左右方向键选曲目,按空格开始,按下方向键回大厅。 |
| `restart` | 按空格再来一遍,按右方向键下一首,按下方向键回大厅。 |
| `menu_main` | 菜单。按空格切换选项,按回车确认。 |
| `skip_hint` | 按空格可跳过旁白。 |
| `gd_miss_early` | 抢拍了。等声音落下再按。 |
| `gd_miss_wrong` | 方向不对。跟着音色按方向键。 |