- 共享引擎(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 模板
98 lines
4.7 KiB
Markdown
98 lines
4.7 KiB
Markdown
# 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
|
||
不精确会破坏玩法机制
|
||
- **真机听测**:三款游戏均只验证到构建层面,手感参数(反应窗口、
|
||
响度平衡、立体声分离度)需要实机试听调整
|