feat(uniapp): 新增「练一练」器械跟练模块 MVP
- 节拍器 hook (useMetronome):setInterval + 漂移自校正,60-200 BPM 误差 <30ms - 训练状态机 hook (useTrainingSession):组数/次数/休息阶段编排 - 语音引导 hook (useVoiceCoach):队列播放,关联节拍回调报数 - BGM hook (useTrainingBgm):训练/休息双音轨手写淡入淡出 - 5 个动作预设:哑铃弯举/推举/侧平举、握力环、健身环卷腹 - CSS 动画组件 exercise-anim:动画时长由 BPM 通过 CSS 变量驱动 - TTS 生成脚本 generate-voice.mjs:调小米 MiMo TTS 自动出 39 段语音 - 静态资源目录占位与素材准备说明 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
# 训练模块静态资源
|
||||
|
||||
本目录用于存放"练一练"功能的所有音频素材。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
src/static/training/
|
||||
├── audio/
|
||||
│ └── click.mp3 # 节拍器主音(短促金属敲击声,约 50ms)
|
||||
├── voice/
|
||||
│ ├── numbers/
|
||||
│ │ └── 1.mp3 ~ 30.mp3 # 数字报数
|
||||
│ └── prompts/
|
||||
│ ├── start.mp3
|
||||
│ ├── ready.mp3
|
||||
│ ├── rest.mp3
|
||||
│ ├── next-set.mp3
|
||||
│ ├── last-rep.mp3
|
||||
│ ├── keep-it-up.mp3
|
||||
│ ├── good-job.mp3
|
||||
│ ├── breathe-in.mp3
|
||||
│ └── breathe-out.mp3
|
||||
└── bgm/
|
||||
├── train-light.mp3 # 训练时背景乐(轻快有节奏感)
|
||||
└── rest-meditation.mp3 # 休息时背景乐(舒缓冥想)
|
||||
```
|
||||
|
||||
## 准备步骤
|
||||
|
||||
### 1. 语音素材(小米 MiMo TTS 自动生成)
|
||||
|
||||
需要 Node 18+(用内置 `fetch`)。先准备小米 MiMo API Key:
|
||||
|
||||
- 文档: https://platform.xiaomimimo.com/
|
||||
- API Key 形如 `sk-xxxxxxxx`
|
||||
|
||||
```bash
|
||||
export MIMO_API_KEY=sk-your-key-here
|
||||
|
||||
cd uniapp
|
||||
node scripts/generate-voice.mjs
|
||||
```
|
||||
|
||||
会自动调用 `mimo-v2.5-tts` 模型生成 39 个 mp3(30 个数字 + 9 个口令)到 `voice/` 目录。
|
||||
|
||||
**可选参数**:
|
||||
|
||||
```bash
|
||||
# 换音色(默认 冰糖;可选:冰糖/茉莉/苏打/白桦/Mia/Chloe/Milo/Dean)
|
||||
node scripts/generate-voice.mjs --voice 茉莉
|
||||
|
||||
# 换格式(默认 mp3,需要跟 hooks/useVoiceCoach.ts 里的 .mp3 后缀对应)
|
||||
node scripts/generate-voice.mjs --format wav
|
||||
|
||||
# 强制重新生成(默认存在则跳过)
|
||||
node scripts/generate-voice.mjs --force
|
||||
```
|
||||
|
||||
**音色推荐**(中文女声更适合健身教练):
|
||||
- `冰糖`:温柔甜美,亲和力强(默认)
|
||||
- `茉莉`:清爽利落,有"运动博主"感
|
||||
- `苏打`:年轻男声,有力量感
|
||||
- `白桦`:成熟男声,沉稳
|
||||
|
||||
### 2. 节拍器 click 音
|
||||
|
||||
任意金属敲击 / 木鱼短音皆可,要求:
|
||||
- 时长 30-100ms
|
||||
- 单声道,44.1kHz
|
||||
- 文件 < 10KB
|
||||
|
||||
推荐来源:
|
||||
- [freesound.org](https://freesound.org) 搜 "click" / "tick"
|
||||
- [pixabay.com/sound-effects](https://pixabay.com/sound-effects/) 搜 "metronome"
|
||||
|
||||
### 3. 背景音乐
|
||||
|
||||
每首 30 秒~2 分钟即可(loop 后听不出接缝)。
|
||||
|
||||
推荐来源(免费可商用):
|
||||
- [pixabay.com/music](https://pixabay.com/music) 搜 "calm" / "meditation" / "lofi"
|
||||
- [freemusicarchive.org](https://freemusicarchive.org)
|
||||
- [bensound.com](https://bensound.com)(含署名)
|
||||
|
||||
文件大小建议 < 1MB(mp3 128kbps 单声道即可)。
|
||||
|
||||
## 在代码里被引用的位置
|
||||
|
||||
- `src/hooks/useMetronome.ts` → `audio/click.mp3`
|
||||
- `src/hooks/useVoiceCoach.ts` → `voice/numbers/*.mp3`、`voice/prompts/*.mp3`
|
||||
- `src/hooks/useTrainingBgm.ts` → `bgm/*.mp3`
|
||||
|
||||
如需修改路径,修改对应 hook 文件里的常量即可。
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 微信小程序对单个文件大小有 10MB 上限,本目录所有文件加起来建议控制在 5MB 以内。
|
||||
- 小程序整包大小限制(主包 2MB / 总包 20MB),如果资源较大建议放 CDN 而非本地 static。
|
||||
- 把 `useVoiceCoach.ts` 里的 `VOICE_BASE` 改成 CDN URL 即可。
|
||||
Reference in New Issue
Block a user