- 新增 web/ 纯音频 HTML5 平台:共享引擎(手势/WebAudio 三层/设置/震动)、 Node 零依赖服务器(静态 + 注册登录 + 进度存档 API) - 游戏:剑与声(RPG 新作)、声命线、暗室(重设计)、音序回响(重设计)、 节拍行者(跟随领奏重构)、盲航(同向闪避重构);声东击西删除 - 全局功能:男声/女声双套 TTS 资产、三档语速、BGM 音量三档、 震动反馈语言(10 种震型)、服务器进度同步 - 资产:899 ogg + 899 m4a(Qwen3-TTS 双性别语音、Stable Audio 3 音效、 Mureka BGM 4+3 首),终检零缺失 - 文档:docs/design/ 13 篇设计审查文档、docs/audio/ 资产管线、 web/server/README.md API 文档
6.0 KiB
6.0 KiB
R1 落地一致性审查报告(策划,R2 轮)
审查对象:docs/web-engine-api.md(R1 变更)、docs/audio/round1-report.md、
web/index.html(大厅新 UI)、web/engine/{settings,haptics,audio}.js、web/server/server.js。
对照基准:docs/design/00-global-ux.md(设计规范初稿)。
总体结论:R1 落地质量高,核心语义全部符合设计。发现 6 处出入,均已裁定"以谁为准"; 00-global-ux.md 已按本报告完成修订(R2 修订版),后续各轮以修订版 00 文档为唯一基准。
出入清单与裁定
1. 震动模块命名与震型表 —— 以实现为准
- 设计:
engine/vibrate.js,常量VIB.CONFIRM/ERROR/...(大写),9 种震型。 - 实现:
engine/haptics.js,HAPTIC_PATTERNS小写命名(confirm/error/success/warning/swipe/heartbeat),6 种预定义 + 自定义数组调用;数值微调(error=[60,40,60] vs 设计 [40,60,40];warning=[30,50,30,50,30] vs [30,40,...])。 - 裁定:以实现为准。 数值差异在感知阈内。设计侧 PICKUP/HIT/BEAT/DANGER 四种语义震型引擎未预定义——R3 起游戏层先用自定义数组([15,40,15]/[80]/[8]/[20,50,30,50,40]),建议引擎 R3 补为预定义(请开发排期)。
- 00 文档 §2 已修订。
2. gesture.js 内置基础震动 —— 以实现为准,设计规范随之修订
- 实现:滑动识别成功自动
swipe、tap/doubletap 自动confirm(web-engine-api.md:222-224 已写明"游戏层不要重复调用,否则双重震动")。 - 设计初稿要求游戏层对"滑动生效/确认"调 SWIPE_OK/CONFIRM——按实现会导致双重震动。
- 裁定:以实现为准。 震动分工:手势识别反馈=引擎内置;语义事件(error/success/warning/PICKUP/HIT/BEAT/DANGER)=游戏层。00 文档 §2.3 已修订,01/02/04/05 各篇中"单击确认给 CONFIRM 震动""滑动给 SWIPE_OK"的表述按此映射理解,不逐一改文。
3. voice 资产回退逻辑 —— 以实现为准(比设计更优)
- 设计:
voice/<gender>/缺失时回退另一性别。 - 实现:
voice/<gender>/→ 回退平铺voice/<id>(web-engine-api.md:145-148),不做性别回退。 - 裁定:以实现为准。 音频总监已保证两性别 id 集合一致(round1-report §1),性别回退无必要;平铺回退恰好解决 storyline 角色台词(单音色)的加载问题,设计更简洁。00 文档 §1.1 已修订。
- 附带确认:voice 缓存键带性别前缀(audio.js:239),运行时切换性别不会串缓存——处理正确。
4. 设置值格式与服务器同步形式 —— 以实现为准
- 设计:speed/bgm 字符串枚举("normal"/"fast"/"veryfast");独立
/api/settings端点。 - 实现:数值(1.0/1.35/1.7、1.0/0.3/0),
settings.js非法值逐项丢弃;设置走进度接口保留键game='_settings'(index.html:288)。 - 裁定:以实现为准。
_settings为全局保留键,任何游戏存档不得占用(00 §4.3 已写明)。数值格式更利于引擎直接乘算。 - speed 生效时机为"下一句起"(audio.js:343,创建 source 时读值)——可接受,文档已注明;正在播放的长句不变速不算问题(句子均 ≤25 字短句)。
5. 进度 API 形态与存档信封 —— 以实现为准
- 设计:
GET/PUT /api/progress/<game>路径段 + 统一信封{schema, game, updatedAt, data};token 存soundgame.token。 - 实现:
GET /api/progress?game=xxx、PUT {game, data};data 自由格式(服务器不校验);token 存soundgame.auth(含 username);大厅卡片约定读data.summary字符串。 - 裁定:以实现为准。 游戏侧
data内仍建议自放schema/updatedAt字段(便于迁移),summary为必须(RPG 存档结构已按此定义,05-rpg-chapter1.md §6)。00 文档 §4 已修订。
6. 各游戏默认音色性别 —— 以实现为准(全局统一默认 female)
- 音频总监建议(round1-report §5.3):按游戏默认原音色性别(storyline/escape=male,其余=female)。
- 实现:全局单一设置项,默认 female,不分游戏。
- 裁定:以实现为准。 全局单项更符合"设置系统"的用户心智(用户选一次全合集生效);各游戏原音色差异已由双性别资产覆盖,用户可自切。此条无需改动,仅记录在案。
需要转达的事项
- 给引擎开发:R3 请在
haptics.js补 4 个预定义震型:pickup=[15,40,15]、hit=[80]、beat=[8]、danger=[20,50,30,50,40](R3 节奏游戏与 R5 RPG 都要用;未补前游戏层传自定义数组,不阻塞)。 - 给音频总监:
- R3 录制依据
docs/design/03-rhythm-voice-ids.md(31 句 ×2 性别,rhythm 旁白 female=Vivian/male=Uncle_Fu 沿用 R1 分配;grade_*/restart 为重录覆盖)。 - R4 录制依据
docs/design/05-rpg-ch1-voice-ids.md(旁白 104×2 + NPC 16 平铺单音色;黑风寨主与村长同为 Uncle_Fu 不同 instruct,请优先试听这两条确认区分度,若混淆寨主改 Dylan 阴狠 instruct)。 - Mureka/SA3 需求:
docs/design/05-rpg-chapter1.md§7(5 BGM + 35 sfx,含英文 prompt 草稿)与 03-rhythm-rebuild.md §8.4(3 首 BGM 重做 + 7 个乐器音)。
- R3 录制依据
- 给大厅/UI 开发:设置变更后的试听句(00 §1.2)列为 R3 打磨项,非阻塞。
- 资产清理:平铺旧 voice 文件待 R2 各游戏切换验证完成后由音频侧清理(round1-report §5.4 已排)。
无出入确认项(抽查通过)
- 音频解锁流程、三层架构、onComplete 打断语义未变,设计文档依赖的契约完好。
- bgm=0 时
_playBgm短路不加载——与设计"不是静音播放"一致。 - simon BGM 资产已删除(round1-report §5.2),与 02 文档一致;game.js 的 bgm 引用移除属 R2 开发任务。
- 服务器安全声明(局域网玩具级、PIN 明文)已在 web/server/README.md 显著标注,符合家庭内网定位,设计无异议。