Files
SoundGame/docs/design/04-space-voice-ids.md
T
xsl ddada6980c fix(space): 盲航刺耳音效重制 + 状态/反馈盲区修复(玩家代理取证迭代)
- F1 程序合成重制5件刺耳音效(alarm≥3kHz能量82%→0,全件≤-3.4dBFS)+新增挥空音
- F2 P0:撞击方位语音防顶断补播(保护期结束死亡窗 hit_* 零毫秒被杀根因)
- F3 保护期教学句7连互截去重;F4 新句 protect_soon 50s预告;F5 boost_not_ready 冷却拒绝回音;F6 激活补CONFIRM震;F7 whiff
- 验证:playtest 172/172 + guide 122 + 终检全绿 + 14游戏回归零回退 + live两轮复跑坐实
- 档案 research/space-polish/round1-2(取证+修复证据);04号文档追加R5修订记录
2026-09-14 20:16:58 +08:00

161 lines
10 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` | 被撞了。听方位,按对应方向键就能拨开。 |
---
## R5 追加 · space polish 轮新增(2 句 × 2 性别 = 4 条;取证依据 research/space-polish/round1/)
> 本轮(R5)只追加,不改上方任何旧表。instruct 沿用全表 `_SPC` 常量(两性别同游戏同 instruct,00 文档 §3.2)。
> 台词已同步 `tools/gen_voice_dual.py` 的 SPACE_LINES(两表一致铁律)与 `web/harness/voice_text.json` 的 space 键。
> 无键盘变体:两句均不含操作词(space 键盘变体表 24 句不增)。
| id | 台词全文 | 触发 |
|---|---|---|
| `protect_soon` | 训练护盾还剩十秒。 | 开局第 50s(保护期剩 10s 预告;queue 不顶句,被菜单/分批引入打断由 _rearmRunTimers 补播) |
| `boost_not_ready` | 引擎还在冷却,稍等一下。 | 加速冷却中单击(R5 归因真话:拒绝必须有回音,此前冷却单击全静默);与护盾拒绝共用 4s 去抖 |