Files
SoundGame/README.md
T
SoundGame Dev f0f0a9b50e 初始提交:3 款纯音频游戏 + 共享引擎 + 完整文档与资产管线
- 共享引擎(app/src/main):GestureEngine 6 手势识别、AudioEngine 三层音频
  (ExoPlayer BGM 交叉淡入 / 对白 ducking / SoundPool 低延迟)、Game/GameEngine
  状态机接口、MainActivity 全屏封面 + TalkBack
- 《声命线》storyline:末世互动广播剧,3 幕 8 抉择点 4 结局
- 《声东击西》reflex:听声辨位反应,12 波战斗 + BGM 三档 BPM 变速
- 《暗室》escape:3x3 网格密室逃脱,钥匙→铁柜→保险丝→电箱→大门谜题链
- 文档:setup(从零搭建)/ architecture(架构)/ engine-api(引擎 API)/
  asset-pipeline(资产流水线)/ games/*(三款游戏设计文档)
- 资产管线:Qwen3-TTS 对白 + 程序合成音效/BGM + Mureka BGM 的 gen 脚本与台账,
  全部 ogg 资产入库可复现
- env.d 环境脚本:android/tts 入库;sfx/mureka 含密钥不入库,仅提交 .example.sh 模板
2026-08-29 13:00:34 +08:00

98 lines
4.7 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.
# SoundGame — 纯音频手机游戏
三款纯音频 Android 游戏:屏幕只有一张封面图,全部操作只有 6 种手势
(上滑 / 下滑 / 左滑 / 右滑 / 单击 / 双击),所有内容靠音频呈现。
对白由本地 Qwen3-TTS 生成,音效为程序合成(numpy/ffmpeg);
《声命线》与《暗室》的 BGM 已用 Mureka API 生成替换(见"待办"一节),
Stable Audio 3 音效环境已就绪,程序合成音效可逐步升级替换。
## 三款游戏
### 1. 《声命线》(storyline) — 末世互动广播剧
大停电后第 30 天,前急救员林晚靠一台旧收音机寻找妹妹,对抗抢掠者"猎狗"。
3 幕、8 个抉择点、4 种结局,单局 5-7 分钟。
- 单击:继续剧情 / 结局后重开
- 双击:重听当前节点
- 左/右滑:关键抉择
- 上滑:帮助 + 当前幕进度
- 下滑:菜单(重新开始)
### 2. 《声东击西》(reflex) — 听声辨位反应
敌人从四方位来袭:左右 = 立体声声像,上 = 高音琶音,下 = 低音轰击。
教学 → 12 波战斗(节奏递增、BGM 三档变速)→ 结算播报得分。
- 四向滑动:击杀对应方位敌人
- 单击:格挡正面攻击(警报音提示)
- 双击:全屏技能(12 秒冷却)
### 3. 《暗室》(escape) — 密室逃脱解谜
3x3 黑暗房间网格探索,环境音线索(滴水/风声/机器嗡鸣)烘焙了方位感。
解谜链:钥匙 → 铁柜 → 保险丝 → 电箱 → 最终大门。
- 四向滑动:在房间间移动(撞墙有反馈)
- 单击:检查房间 / 拾取物品
- 双击:使用物品(无目标时播报背包+提示)
## 构建
```bash
source env.d/android.sh # JDK 17 / Android SDK / ffmpeg
./gradlew assembleStorylineDebug assembleReflexDebug assembleEscapeDebug
```
APK 输出在 `app/build/outputs/apk/<flavor>/debug/`:
| 游戏 | APK | 包名 | 大小 |
|---|---|---|---|
| 声命线 | app-storyline-debug.apk | com.soundgame.storyline | ~19.6MB |
| 声东击西 | app-reflex-debug.apk | com.soundgame.reflex | ~14.2MB |
| 暗室 | app-escape-debug.apk | com.soundgame.escape | ~15.4MB |
安装:`adb install app/build/outputs/apk/storyline/debug/app-storyline-debug.apk`
(真机调试优先无线调试:`adb pair` + `adb connect`,详见 `env.d/android.md`)
## 文档
- `docs/setup.md` — 从零环境搭建手册(WSL2 用户态安装、AI 环境、镜像速查、故障排查)
- `docs/architecture.md` — 引擎架构(模块划分、音频三层时序、手势参数、已知限制)
- `docs/engine-api.md` — 引擎 API(如何开发一款新游戏)
- `docs/asset-pipeline.md` — 资产生产流水线(TTS / 音效 / BGM 生成与规格)
- `docs/games/storyline.md` — 《声命线》设计文档(剧情树、音色分配)
- `docs/games/reflex.md` — 《声东击西》设计文档(波次表、难度曲线)
- `docs/games/escape.md` — 《暗室》设计文档(房间地图、谜题链)
- `env.d/` — 环境与使用说明(android / tts / sfx)
## 工程结构
- `app/src/main/` — 共享引擎:GestureEngine(6 手势识别)、
AudioEngine(ExoPlayer BGM/对白分层 + ducking,SoundPool 低延迟音效)、
Game/GameEngine 状态机接口、MainActivity(全屏封面 + TalkBack)
- `app/src/<flavor>/` — 各游戏:Game 实现、assets/audio/{bgm,voice,sfx}、
封面图、`gen/`(音频资产生成脚本,可复现)
- `docs/` — 项目文档(见上方"文档"一节)
- `env.d/` — 环境与使用说明(android / tts / sfx)
- `tools/`、`models/` — 本机 AI 环境(Qwen3-TTS、Stable Audio 3、ffmpeg)
## 音频资产再生成
```bash
source env.d/tts.sh # HF_HOME、镜像
# 例:重新生成《声命线》全部语音(flock 串行保护 GPU)
flock .gpu.lock .venv-tts/bin/python app/src/storyline/gen/gen_voice.py
```
## 待办(需要账号操作)
- **Stable Audio 3 音效**:环境已就绪(token 已配、模型已下载、CLI 冒烟通过,
见 `env.d/sfx.md`)。程序合成音效可按 `docs/asset-pipeline.md` 逐步升级替换
(同名同目录替换,游戏代码零改动)
- **Mureka 歌曲/配乐**:已完成。《声命线》(dark_drone.ogg) 与《暗室》(drone.ogg)
的 BGM 已用 Mureka instrumental API 生成并无缝循环化处理后替换(生成/调用记录见
`tools/mureka_log.md`,脚本 `tools/mureka_gen.py`,原合成版备份在
`tools/bgm_backup/`)。《声东击西》的 3 个 BGM 保留程序合成版:
其玩法要求 100/128/152 BPM 三档脉冲随波次精确切换,AI 生成曲目 BPM
不精确会破坏玩法机制
- **真机听测**:三款游戏均只验证到构建层面,手感参数(反应窗口、
响度平衡、立体声分离度)需要实机试听调整