同步音频文档至 v5 克隆现行状态

更新林夏设计纲要、执行文档与技术报告,对齐 VoxCPM2 8002 端口、v4/v5 流水线、游戏 184 个 MP3 引用及 13 角色参考音色。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
xsl
2026-05-24 10:35:49 +08:00
co-authored by Cursor
parent 12eb1eab44
commit 9c02fbcd74
5 changed files with 372 additions and 299 deletions
+47 -46
View File
@@ -1,73 +1,74 @@
# 《林夏》角色 Voice Design 提示词
# 《林夏》角色语音提示词
> **模式**VoxCPM2 **Voice Design**(纯提示词,**不使用** `voice/` 参考音频)
> **接口**`POST /v1/speech/styled` — `{ "text": "...", "style": "..." }`**不传** `voice_id`
> **目的**:每个角色用不同提示词生成**不同音色**;同角色内用表演修饰控制 warm/cold 等分支。
> **现行生产(v5)**:参考 wav 锚定音色 + `get_clone_style()` 表演修饰 → `04_gen_tts_clone.py`
> **试听选音色(v4**Voice Design 纯提示词 → `03_gen_voice_samples.py`
> **详细状态**`audio_2/项目状态说明.md`
---
## 1. 与 v2 的区别
## 1. 三阶段关系
| | v2 (`v2_styled`) | v3 (`v3_voice_design`) |
|---|---|---|
| 音色来源 | `voice/{角色}/` 参考音频克隆 | 提示词描述音色 |
| API | `voice_id` + `style` | 仅 `style` |
| 同角色音色 | 与 audio_1 相同 | **全新,各角色互不相同** |
| 阶段 | 脚本 | 音色来源 | 状态 |
|------|------|----------|------|
| v4 试听 | `03_gen_voice_samples.py` | Voice Design 提示词(无参考) | 已选定 13 角色参考 |
| **v5 克隆** | `04_gen_tts_clone.py` | 选定 wav + 表演修饰 | **游戏正在使用** |
| v3 纯设计 | `02_gen_tts_voice_design.py` | 仅提示词 | 已废弃 |
v5 克隆时**不再**叠加 `ROLE_VOICE_DESIGN` 音色描述,音色由 `v4_voice_samples/` 中选定 wav 决定。
---
## 2. 角色音色提示词(Voice Design 核心
## 2. 已选定参考音色(v4 试听结果
| 角色 | 性别 | design 提示词 |
|------|------|--------------|
| `linxia` | 女 | 24岁中国女性,中低音女声,声线偏薄但稳定,疲惫但清醒,克制有温度,普通话,像深夜发微信语音 |
| `mom` | 女 | 52岁中国女性,温厚的中老年女声,音色略哑,轻微西部口音,说话慢而稳,像母亲打电话 |
| `azhe` | **男** | 27岁中国男性,清朗偏低男声,城市口音,理性偏冷,语速平稳,用词克制,略带距离感 |
| `xiaomei` | 女 | 24岁中国女性,明亮偏高的女声,语速快,活泼直接,像闺蜜连发语音,能量足 |
| `xiaomei_drunk` | 女 | 24岁中国女性,同闺蜜音色但喝醉了,口齿略含糊,情绪起伏大,时而哭时而笑 |
| `zhounan` | **男** | 26岁中国男性,温和偏闷的男中音,略拘谨,语速偏慢,像很久没联系的老同学,真诚不油 |
| `hr` | 女 | 38岁中国女性,成熟职场女声,中音区,知性干练,疲惫的善意,像HR发工作语音 |
| `anan` | 女 | 23岁中国女性,甜亮高音女声,语速快,比闺蜜更嗲,像在酒吧里喊,背景略吵 |
| `dorm_a` | 女 | 22岁中国女性,兴奋尖亮女声,语速很快,像群里报喜,充满喜悦 |
| `dorm_b` | 女 | 23岁中国女性,普通随和女声,中音,语速正常,像室友起哄 |
| `dorm_c` | 女 | 23岁中国女性,温柔低声女声,语速略慢,像注意到朋友沉默的室友 |
| `delivery` | **男** | 30岁中国北方男性,**男声**,偏低略粗,麻利直接,语速快,北方口音,像外卖小哥打电话 |
| `self_3y` | 女 | 21岁中国女性,比林夏更亮更高的女声,刚来北京,兴奋带紧张,声音更年轻 |
| 角色 | 文件 | 性别 |
|------|------|------|
| linxia | `linxia_v05.wav` | 女 |
| mom | `mom_v01.wav` | 女 |
| azhe | `azhe_v03.wav` | 男 |
| xiaomei | `xiaomei_v05.wav` | 女 |
| xiaomei_drunk | `xiaomei_drunk_v05.wav` | 女 |
| zhounan | `zhounan_v05.wav` | 男 |
| hr | `hr_v05.wav` | 女 |
| anan | `anan_v04.wav` | 女 |
| dorm_a/b/c | `v03` / `v02` / `v03` | 女 |
| delivery | `delivery_v04.wav` | **男** |
| self_3y | `self_3y_v03.wav` | 女 |
配置文件`audio_2/voice_style_prompts.py`
路径`audio_2/tts/v4_voice_samples/{角色}/` · 副本:`voice/{角色}/{角色}_ref.wav`
---
## 3. 表演修饰(同角色叠加
## 3. 表演修饰(v5 克隆时使用
林夏等分支台词会在音色描述后追加,例如:
`audio_2/voice_style_prompts.py``get_clone_style()` 按文件名返回,例如:
- `_warm` `,语气温暖开放,柔软但有分寸`
- `_cold``,语气冷淡疏离,短促`
- 妈妈长语音 seg1seg8、周南 seg1seg4、小美醉 seg1seg4 等见 `voice_style_prompts.py`
- 林夏 `_warm` / `_cold` / `_curious` / `ending_` / `sys_`
- 妈妈长语音 `seg1``seg8`、周南 `seg1``seg4`、小美醉 `seg1``seg4`
- self-3y 三版:`voice_01` 兴奋带紧张 / `voice_02` 疲惫假装坚强 / `voice_03` 平静有力
---
## 4. 批量生产
## 4. Voice Design 提示词(v4 试听用)
试听变体配置:`audio_2/voice_sample_prompts.py``ROLE_VOICE_VARIANTS`
统一试听文本:`AUDITION_TEXT`(每角色约 10 秒)
重新生成某角色试听:
```bash
VOXCPM_PORT=8002 bash /home/xsl/tts-server/start-voxcpm.sh
# 全量
VOXCPM_PORT=8002 python audio_2/scripts/02_gen_tts_voice_design.py --force
# 试听单个角色
python audio_2/scripts/02_gen_tts_voice_design.py --role delivery --test --force
python audio_2/scripts/02_gen_tts_voice_design.py --role linxia --test --force
VOXCPM_PORT=8002 python audio_2/scripts/03_gen_voice_samples.py --role delivery --force
```
输出:`audio_2/tts/v3_voice_design/*_wav_v3.mp3`
清单:`audio_2/tts/v3_voice_design/voice_design_manifest.tsv`
选定后替换 `v4_voice_samples/{role}/` 中 wav,再跑:
```bash
VOXCPM_PORT=8002 python audio_2/scripts/04_gen_tts_clone.py --role delivery --force
```
---
## 5. 注意事项
1. **Voice Design 同角色各条之间音色可能略有漂移**——无参考音频锚定。若某角色不稳定,可挑一条满意的音频注册为参考,改回 Style Control
2. **调整音**`ROLE_VOICE_DESIGN` 里对应角色的描述,重跑该角色即可
3. **外卖小哥必须是男声**——已在 `delivery` 提示词中写明「中国北方男性,男声」
1. **Voice Design 音色会漂移**——因此正式版必须「试听选定 → 克隆锚定」
2. **男声角**`azhe``zhounan``delivery`(delivery 语速已调慢,后处理倍率 1.00)
3. **游戏仅加载** `audio/mp3/tts/*_wav_v1.mp3`
+2 -3
View File
@@ -18,7 +18,7 @@
```
../audio/mp3/
├── tts/ 对白(177 条
├── tts/ 对白(169 条,游戏引用
├── music/ BGM、铃声
├── sfx/ 音效
└── ambience/ 环境音
@@ -120,7 +120,7 @@ blind/
├── audio/
│ ├── batch_tts_voxcpm.py 台词表 LINES + 角色语速 ROLES
│ └── mp3/ 游戏运行时音频(184 文件,已清理)
│ ├── tts/ 177 条对白
│ ├── tts/ 169 条对白(游戏引用)
│ ├── music/
│ ├── sfx/
│ └── ambience/
@@ -208,7 +208,6 @@ VoxCPM2 **不能**用提示词生成敲门、心跳等 SFX,只能做人声 TTS
- [ ] 实机/playtest 听一遍各角色,标记需重跑的台词或角色
- [ ] 若某角色不满意:改 `voice_sample_prompts.py` → 重跑 `03` 挑选 → 替换 `v4_voice_samples/{role}/` → 重跑 `04`
- [ ] 微调单条表演:改 `voice_style_prompts.py``_performance` 规则 → `--role xxx --force`
- [ ] 设计文档:`林夏.md``执行文档_音频素材制作.md`
---
+151 -137
View File
@@ -1,8 +1,9 @@
# 《林夏》音频素材本地制作执行文档
> **前置文档**:`林夏.md`(游戏设计)、`SOP_AI音频生产.md`(生产规范)
> **现行状态**`audio_2/项目状态说明.md`(v5 音色、目录、命令,**以此为准**)
> **执行环境**:本机 WSL2 · RTX 5090 32GB · FFmpeg 7.0
> **TTS 主链路****VoxCPM2**见 `林夏.md` §7.2),批量脚本 `audio/batch_tts_voxcpm.py`
> **TTS 主链路****VoxCPM2**Voice Design 试听 → 克隆 → Style Control 表演),脚本 `audio_2/scripts/04_gen_tts_clone.py`
> **TTS 备用**CosyVoice2-0.5B(见附录 B
> **目标**:按 SOP 规范在本地生产全部音频素材
@@ -12,14 +13,17 @@
| 资源 | 路径 / 状态 | 用途 |
|---|---|---|
| **VoxCPM2** | `bash /home/xsl/AutoVideo/start-voxcpm.sh` `http://127.0.0.1:8000` | **TTS 主链路**(声音克隆 + 合成 |
| **VoxCPM2** | `/home/xsl/tts-server/` · 端口 **8002** · `bash /home/xsl/tts-server/start-voxcpm.sh` | **TTS 主链路**Voice Design + 声音克隆 + Style Control |
| CosyVoice 2.0 (0.5B) | `/home/xsl/tools/CosyVoice` · conda env: `cosyvoice` | TTS 备用(见附录 B |
| ACE-Step 1.5 | `/home/xsl/tools/ACE-Step-1.5` · conda env: `acestep` | BGM / 铃声 / 叙事音效 / 环境音 |
| Stable Audio Open 1.0 | `/home/xsl/tools/stable-audio-tools` · conda env: `stableaudio` | 高品质音效补充 |
| FFmpeg 7.0 | `/usr/local/bin/ffmpeg` | 音频格式转换、响度归一化、听筒效果 |
| GPU | RTX 5090 32GB | 跑 VoxCPM2 / CosyVoice 推理 |
| GPU | RTX 5090 32GB | 跑 VoxCPM2 / CosyVoice / ACE-Step 推理 |
| MuseTalk | `/home/xsl/work/MuseTalk` | **注意:这是唇形同步工具,不是 TTS** |
> **SOP 中的 MiniMax / 豆包 API 全部替换为本地 VoxCPM2**。音乐(Suno)、音效(ElevenLabs SFX)、环境采样(Freesound)仍走云端。
> CosyVoice2 保留作为备用方案(见附录 B),仅在 VoxCPM2 表现不佳时切换。
> **端口说明**8000 被 head3d 占用,TTS 固定使用 **8002**`VOXCPM_PORT=8002`)。
> **游戏运行时音频**`audio/mp3/`184 文件,仅保留 `story.js` / `engine.js` 引用的 `*_wav_v1.mp3` 等)。
> CosyVoice2 保留作为备用,仅在 VoxCPM2 表现不佳时切换。
---
@@ -36,20 +40,26 @@ mkdir -p voice/{linxia,mom,azhe,xiaomei,zhounan,hr,anan,dorm_a,dorm_b,dorm_c,del
### 1.2 启动 VoxCPM2 服务
```bash
# 启动 VoxCPM2 TTS 服务
bash /home/xsl/AutoVideo/start-voxcpm.sh
# uvicorn 服务: http://127.0.0.1:8000
VOXCPM_PORT=8002 VOXCPM_ENABLE_DENOISER=0 bash /home/xsl/tts-server/start-voxcpm.sh
# 服务: http://127.0.0.1:8002
```
验证服务可用:
```bash
curl -s http://127.0.0.1:8000/docs | head -5
# 应返回 API 文档页面
curl -s http://127.0.0.1:8002/health
# 预期: {"status":"ok","model":"VoxCPM2","styled_speech":true}
```
**VoxCPM2 API 接口**(详见 `林夏.md` §7.2):
- `POST /v1/voices` — 注册参考音频(wav_base64)→ 返回 voice_id
- `POST /v1/speech` — 合成语音(text + voice_id)→ 返回 WAV
**VoxCPM2 API 接口**(详见 `林夏.md` §7.2`/home/xsl/tts-server/server.py`):
| 接口 | 用途 |
|------|------|
| `POST /v1/voices` | 注册参考音频(wav_base64)→ voice_id |
| `POST /v1/speech` | 纯克隆合成(text + voice_id)→ WAV |
| `POST /v1/speech/styled` | Style Control / Voice Design(见下) |
-`voice_id` → 克隆音色 + style 表演修饰
-`voice_id` → 纯 Voice Design(仅提示词,无参考音频)
- 输出格式:48kHz 16-bit PCM WAV
### 1.4 验证 FFmpeg
@@ -67,104 +77,118 @@ echo "FFmpeg loudnorm 可用"
## 2. 角色参考音频准备(关键步骤)
VoxCPM2 的声音克隆需要**每个角色一段参考音频**(WAV 格式)。参考音频的音色决定了最终 TTS 的音色。参考音频存放在 `voice/{角色}/` 目录下(详见 `林夏.md` §7.3 角色音色配置)
VoxCPM2 的声音克隆需要**每个角色一段参考音频**(WAV)。**现行方案**:先用 Voice Design 生成试听变体,人工选定后作为永久参考
### 2.1 参考音频来源方案
### 2.1 现行流程(v4 → v5
```
1. 03_gen_voice_samples.py → 每角色 5 条约 10s 试听(不同提示词)
2. 人工试听,每角色保留 1 条 → audio_2/tts/v4_voice_samples/{role}/
3. 04_gen_tts_clone.py → 全量克隆 + 部署 audio/mp3/tts/*_wav_v1.mp3
4. 副本同步到 voice/{角色}/{角色}_ref.wav
```
**已选定参考**2026-05-23):
| 角色 | 文件 | 性别 |
|------|------|------|
| linxia | `linxia_v05.wav` | 女 |
| mom | `mom_v01.wav` | 女 |
| azhe | `azhe_v03.wav` | 男 |
| xiaomei | `xiaomei_v05.wav` | 女 |
| xiaomei_drunk | `xiaomei_drunk_v05.wav` | 女 |
| zhounan | `zhounan_v05.wav` | 男 |
| hr | `hr_v05.wav` | 女 |
| anan | `anan_v04.wav` | 女 |
| dorm_a/b/c | `v03` / `v02` / `v03` | 女 |
| delivery | `delivery_v04.wav` | **男** |
| self_3y | `self_3y_v03.wav` | 女 |
提示词配置:`audio_2/voice_sample_prompts.py`(试听)、`audio_2/voice_style_prompts.py`(表演修饰)。
### 2.2 参考音频规格(仍适用)
- **时长**:5-20 秒(推荐 10 秒左右)
- **格式**WAV16kHz mono(注册前由脚本自动转换)
- **内容**:完整中文句子
- **质量**:干声为主,避免底噪、混响、BGM
### 2.3 旧方案(人工录音 / 截取)
若 Voice Design 不满意,仍可按原方案准备参考音频放入 `voice/{角色}/`
| 角色 | 音色要求 | 参考音频获取方案 |
|---|---|---|
| `mom` 妈妈 | 50 岁,温柔克制 | 方案 A:找一位 45-55 岁女性朋友录 15 秒朗读(最佳);方案 B:从影视作品中截取合适片段 |
| `azhe` 阿哲 | 27 岁,理性偏冷 | 播客/有声书截取年轻男声冷淡片段 |
| `xiaomei` 小美 | 24 岁,活泼 | 找年轻女性朋友录制,或从 vlog 截取 |
| `zhounan` 周南 | 26 岁,温和拘谨 | 播客/有声书截取温和男声 |
| `hr` HR 王姐 | 38 岁,知性 | 新闻女主播或播客截取 |
| `anan` 安安 | 23 岁,可爱 | 年轻女性活泼语调截取 |
| `dorm-a/b/c` | 三个不同年轻女声 | 需要 3 段风格不同的女声参考 |
| `delivery` 外卖小哥 | 30 岁,北方腔 | 短视频/影视截取 |
| `system` 系统 | 中性 AI 女声 | VoxCPM2 注册一个中性女声参考音频 |
| `self-3y` 3年前自己 | 同 xiaomei 基底 | 复用 xiaomei 参考音频,调速度和音调 |
### 2.2 参考音频制作规格
- **时长**:5-20 秒(推荐 10 秒左右)
- **格式**WAV16kHz 以上采样率
- **内容**:完整的中文句子(需同时记录对应文字)
- **质量**:干声为主,避免底噪、混响、BGM
存放路径:`voice/{角色代号}/`(与 `林夏.md` §7.3 保持一致)
```bash
# 如果参考音频不是 wav 或采样率不对,用 FFmpeg 转换
ffmpeg -i input.mp3 -ar 16000 -ac 1 voice/mom/ref.wav
```
### 2.3 创建参考音频记录表
`voice/` 下创建 `ref_manifest.txt`,记录每条参考音频对应的文字:
```
mom/ref.wav | 今天天气不错,妈妈给你做了红烧排骨,等你回来吃饭。
azhe/ref.wav | 好的,我知道了,那件事明天再说吧。
xiaomei/ref.wav | 哎你猜怎么着,今天路上遇到一个超级搞笑的事!
zhounan/ref.wav | 嗯,其实我也不太确定,就是觉得应该跟你说一声。
hr/ref.wav | 好的,那我们下周三前把流程走完,有什么问题随时联系我。
anan/ref.wav | 天呐天呐你快来!这边超级好玩的!
dorm_a/ref.wav | 嘿你们看看我,今天升职了!请大家吃饭!
dorm_b/ref.wav | 恭喜恭喜啊,太厉害了,我就知道你行的。
dorm_c/ref.wav | 嗯,不错,对了夏夏怎么不说话啊。
delivery/ref.wav | 你好你的外卖到了,放门口了啊,麻辣烫注意别洒了。
```
| `mom` 妈妈 | 50 岁,温柔克制 | 真人录音或影视截取 |
| `azhe` 阿哲 | 27 岁男声,理性偏冷 | 播客/有声书截取 |
| `delivery` 外卖小哥 | 30 岁北方男声 | 语速适中,非过快 |
| … | 见 `林夏.md` §7.3 | — |
---
## 3. TTS 生产流程
### 3.1 VoxCPM2 声音克隆流程
### 3.0 现行主力:v5 克隆流水线 ★
**前置**确认 VoxCPM2 服务已启动(§1.2)。
**单条合成步骤**
1. 将角色参考音频注册为 voice_id:`POST /v1/voices`wav_base64
2. 调用合成接口:`POST /v1/speech`text + voice_id
3. 获得 48kHz 16-bit PCM WAV
4. 用 FFmpeg atempo 调速(按 `林夏.md` §7.3 各角色语速配置)
5. 保存到 `audio/00_raw/tts/`
**角色音色目录**(与 `林夏.md` §7.3 一致):
```
voice/
├── linxia/ # 林夏(speed 1.00
├── mom/ # 妈妈(speed 0.92
├── azhe/ # 阿哲(speed 1.05
├── xiaomei/ # 小美(speed 1.10,醉态 0.95
├── zhounan/ # 周南(speed 0.95
├── hr/ # HR 王姐(speed 1.00
├── anan/ # 安安(speed 1.15
├── dorm_a/ # 室友 Aspeed 1.10
├── dorm_b/ # 室友 Bspeed 1.00
├── dorm_c/ # 室友 Cspeed 0.95
└── delivery/ # 外卖小哥(speed 1.20
```
### 3.2 用批量脚本生产(主力方式)
使用项目自带的 VoxCPM2 批量合成脚本:
**前置**VoxCPM2 已启动(§1.2,参考音频已在 `v4_voice_samples/` 每角色 1 条
```bash
# 确保 VoxCPM2 服务已启动
bash /home/xsl/AutoVideo/start-voxcpm.sh
cd /home/xsl/blind
# 批量合成所有台词
python audio/batch_tts_voxcpm.py --source voice
# 全量克隆 + 自动部署游戏目录
VOXCPM_PORT=8002 python audio_2/scripts/04_gen_tts_clone.py --force
# 只合成特定角色
python audio/batch_tts_voxcpm.py --source voice --role linxia
# 只重跑某角色
VOXCPM_PORT=8002 python audio_2/scripts/04_gen_tts_clone.py --role delivery --force
# 干跑查看任务列表
# 预览任务
python audio_2/scripts/04_gen_tts_clone.py --dry-run
```
| 步骤 | 脚本 | 输出 |
|------|------|------|
| 试听选音色 | `03_gen_voice_samples.py` | `audio_2/tts/v4_voice_samples/` |
| 全量克隆 | `04_gen_tts_clone.py` | `audio_2/tts/v5_cloned/*_wav_v5.mp3` |
| 游戏部署 | (04 脚本自动) | `audio/mp3/tts/*_wav_v1.mp3` |
- 台词来源:`audio/batch_tts_voxcpm.py``LINES`173 条)+ `EXTRA_LINES`self-3y ×3、系统 memo
- 表演修饰:`audio_2/voice_style_prompts.py``get_clone_style()`
- 清单:`audio_2/tts/v5_cloned/clone_manifest.tsv`
**游戏仅加载 `*_wav_v1.mp3`**,不加载 `*_mp3_v1.mp3`
### 3.1 VoxCPM2 声音克隆流程(底层原理)
**单条合成步骤**
1. 将角色参考音频注册为 voice_id:`POST /v1/voices`
2. 调用:`POST /v1/speech/styled`text + voice_id + style 表演修饰)
3. 获得 48kHz WAV → ffmpeg atempo 调速(`ROLES` 配置)→ MP3
4. 部署到 `audio/mp3/tts/`
**角色语速**`audio/batch_tts_voxcpm.py``ROLES`,与 `林夏.md` §7.3 一致):
```
voice/
├── linxia/ # 1.00
├── mom/ # 0.92
├── azhe/ # 1.05
├── xiaomei/ # 1.10(醉态 xiaomei_drunk 0.95
├── zhounan/ # 0.95
├── hr/ # 1.00
├── anan/ # 1.15
├── dorm_a/b/c # 1.10 / 1.00 / 0.95
├── delivery/ # 1.00(已从 1.20 调慢)
└── self_3y/ # 1.15(独立参考 self_3y_v03.wav
```
### 3.2 旧版批量脚本(参考,已被 v5 替代)
```bash
# 旧流程:直接读 voice/ 参考,无 Style Control 表演
python audio/batch_tts_voxcpm.py --source voice --dry-run
```
脚本读取 `voice/` 目录下的参考音频,按 `林夏.md` §7.3 角色配置自动注册 voice_id 并批量合成。输出到 `audio/00_raw/tts/`
输出原为 `audio/00_raw/tts/`,现正式产物见 `audio_2/tts/v5_cloned/` `audio/mp3/tts/`
### 3.3 长戏分段处理
@@ -191,29 +215,22 @@ SOP §5.3 规定:**超过 30 秒的台词必须分段录制**。
### 3.4 系统 TTS
系统提示音(播报状态、念选项等)用 VoxCPM2 注册一个中性女声参考音频
系统提示音(内容警告、暂停、热线、等待回复、memo 等)**现行方案**
1. 准备一段清晰的中性女声参考音频(如新闻播报片段),存入 `voice/system/`
2. 通过 `POST /v1/voices` 注册为 system voice_id
3.`POST /v1/speech` 合成所有系统语句
系统语句示例:
- "阿哲,发来1条语音。8秒。"
- "是否回复?"
- "一,好,明天寄。二,你怎么不自己来拿。三,你那边都好吗。四,什么都不说。"
- "妈妈3条未读、小美1条已读、阿哲1条未播放"
- 大部分系统语音用 **林夏音色**`linxia_ref.wav`)克隆,见 `LINES``v2_sys_*``lv11_sys_memo_01`
- 合成走 v5 流水线,与对白同一套参考
### 3.5 self-3y 三版预录
使用与 `xiaomei` 同基底参考音频,但调整 speed 为 +0.05(即 1.15):
**现行**:独立参考 `self_3y_v03.wav`(非复用小美),角色 key 为 `self_3y`speed 1.15
| 版本 | 文件名 | 内容要求 | 情绪 |
|---|---|---|---|
| 明朗版 | `lv11_0030_self-3y_voice_01` | 3 年前刚来北京,对一切新鲜 | 兴奋带紧张 |
| 迷茫版 | `lv11_0030_self-3y_voice_02` | 3 年前已经累了 | 假装坚强 |
| 温柔版 | `lv11_0030_self-3y_voice_03` | 写给未来的自己 | 平静有力 |
| 版本 | 文件名 | 情绪 |
|---|---|---|
| 明朗版 | `lv11_0030_self3y_voice_01` | 兴奋带紧张 |
| 迷茫版 | `lv11_0030_self3y_voice_02` | 疲惫假装坚强 |
| 温柔版 | `lv11_0030_self3y_voice_03` | 平静有力 |
> 台词需要编剧写好,每版约 50 秒
台词见 `audio_2/scripts/04_gen_tts_clone.py``EXTRA_LINES`
---
@@ -346,9 +363,11 @@ ffmpeg -i input.wav \
---
## 5. 音乐素材(Suno
## 5. 音乐素材(ACE-Step 本地 + Suno 备选
音乐生产仍走 Suno 云端,按 SOP §6 操作
**现行产出**:BGM 4 轨 + 铃声 5 条,均由 **ACE-Step 1.5** 本地生成,已部署至 `audio/mp3/music/`
Suno 仍可作为备选(按 SOP §6 操作):
### 5.1 操作步骤
@@ -380,7 +399,11 @@ done
---
## 6. 音效素材(ElevenLabs SFX
## 6. 音效素材(ACE-Step 本地 + ElevenLabs 备选
**现行产出**:叙事音效 4 条(敲门、心跳、呼吸、水壶)在 `audio/mp3/sfx/`,由 ACE-Step 生成。
ElevenLabs SFX 仍可作为备选:
### 6.1 操作步骤
@@ -491,34 +514,25 @@ done
---
## 9. 执行顺序总结
## 9. 执行顺序总结(现行状态 2026-05-23
```
第 1 步 · 启动 VoxCPM2 + 部署环境 (§1)
↓ 约 30 分钟
2 步 · 准备参考音频到 voice/ (§2) ← 这一步最关键,音色质量取决于此
↓ 约 1-3 天(需要找人录音或搜集素材
3 步 · 系统 TTS 先行 (§3.4) ← 最简单的先跑通 VoxCPM2 流程
↓ 约 1 小时
第 4 步 · 短台词批量生产 (§3.2 batch_tts_voxcpm.py)
↓ 约 3-4 小时
第 5 步 · 长戏分段录制 (§3.3)
↓ 约 2-3 小时
第 6 步 · 后期处理 (§4)
↓ 约 2-3 小时
第 7 步 · 铃声 + 音乐 (§5) ← 可与 TTS 并行
↓ 约 3 小时
第 8 步 · 音效 (§6) ← 可与 TTS 并行
↓ 约 3 小时
第 9 步 · 环境底噪 (§7) ← 可与 TTS 并行
↓ 约 2 小时
第 10 步 · QA 验收 (§8)
↓ 约 4-6 小时
第 11 步 · 最终打包 (§4.5)
↓ 约 30 分钟
完成
第 1 步 · 部署 VoxCPM2/home/xsl/tts-server,端口 8002
✅ 第 2 步 · Voice Design 试听 → 选定 13 角色参考 wav(v4)
3 步 · v5 全量克隆 + 部署 audio/mp3/tts/04_gen_tts_clone.py
✅ 第 4 步 · BGM / 铃声 / 音效 / 环境音(ACE-Step → audio/mp3/
5 步 · 清理未引用音频(184 文件与游戏对齐)
⬜ 第 6 步 · Playtest 听感迭代 + QA(§8
```
**重跑 TTS**(改参考或表演修饰后):
```bash
VOXCPM_PORT=8002 python audio_2/scripts/04_gen_tts_clone.py --force
```
详细目录与命令见 `audio_2/项目状态说明.md`。
---
## 附录 A · 常见问题
+56 -21
View File
@@ -1,8 +1,9 @@
# 音频资源制作技术落地报告
> 调研日期:2026-05-20
> 最后更新:2026-05-20(新增 Stable Audio 部署完成状态
> 最后更新:**2026-05-23**VoxCPM2 v5 克隆落地、游戏音频清理对齐
> 硬件环境:NVIDIA RTX 5090 (32GB VRAM) / CUDA Driver 12.9 / WSL2 Linux
> **项目现行状态**:见 `audio_2/项目状态说明.md`
---
@@ -10,7 +11,7 @@
| 能力域 | 工具 | 状态 | 环境 |
|--------|------|------|------|
| TTS 语音合成 | VoxCPM2 | **运行中** (port 8000) | Python 3.13 venv |
| TTS 语音合成 | VoxCPM2 | **运行中** (port **8002**) | `/home/xsl/tts-server/` Python venv |
| TTS 语音合成 | CosyVoice2-0.5B | 已部署,需手动启动 | conda cosyvoice |
| 音乐/铃声生成 | ACE-Step 1.5 | 已部署,需手动启动 | conda acestep |
| 音效/氛围生成 | ACE-Step 1.5 | 同上 | conda acestep |
@@ -22,16 +23,21 @@
| 音频分析 | librosa / soundfile / pydub | 可用 | pip |
| 音视频同步 | MuseTalk / LatentSync | 已部署 | conda 环境 |
### 当前产出数据 (《林夏》项目)
### 当前产出数据 (《林夏》项目2026-05-23)
| 类型 | 数量 | 生成工具 |
|------|------|----------|
| TTS 对话语音 | 216 条 (mp3/tts/) | VoxCPM2 |
| BGM 背景音乐 | 4 轨 (90s/30s/120s/120s) | ACE-Step 1.5 |
| 角色铃声 | 9 条 | ACE-Step 1.5 |
| 音效 | 18 条 | ACE-Step 1.5 |
| 环境氛围 | 6 条 | ACE-Step 1.5 |
| 总计 MP3 | 372 个文件 | — |
| 类型 | 数量 | 路径 | 生成工具 |
|------|------|------|----------|
| TTS 游戏对白 | **169** 条 | `audio/mp3/tts/*_wav_v1.mp3` | VoxCPM2 v5 克隆 |
| TTS 归档产物 | **177** 条 | `audio_2/tts/v5_cloned/*_wav_v5.mp3` | 同上(含台词表全量 + extra) |
| 参考音色 | **13** 角色 | `audio_2/tts/v4_voice_samples/` + `voice/*_ref.wav` | Voice Design 试听选定 |
| BGM | 4 轨 | `audio/mp3/music/` | ACE-Step 1.5 |
| 角色铃声 | 5(游戏引用 4 场景) | `audio/mp3/music/` | ACE-Step 1.5 |
| 叙事音效 | 4 条 | `audio/mp3/sfx/` | ACE-Step 1.5 |
| 环境氛围 | 3 条 | `audio/mp3/ambience/` | ACE-Step 1.5 |
| UI 短音效 | 13 种 | 浏览器内 | Web Audio API |
| **游戏 MP3 合计** | **184** | `audio/mp3/` | 已与 story.js 对齐 |
> 注:8000 端口被 head3d 占用,VoxCPM2 固定 **8002**。旧 `*_mp3_v1.mp3` 与 legacy 目录(`audio/mp3/linxia/`、`react/`)已清理。
---
@@ -43,12 +49,22 @@
| 工具 | 模型大小 | VRAM | 中文质量 | 声音克隆 | 延迟 | 特点 |
|------|---------|------|---------|---------|------|------|
| **VoxCPM2** | 4.7GB | ~6GB | A | 零样本 (5-30s参考音频) | ~1s/句 | FastAPI 服务,REST API48kHz WAV 输出,带降噪器 |
| **VoxCPM2** | 4.7GB | ~6GB | A | 零样本 (5-30s参考音频) | ~1s/句 | FastAPI`/home/xsl/tts-server/`port **8002**;支持 Style Control + Voice Design |
| **CosyVoice2-0.5B** | 5.3GB | ~8GB | A+ | 零样本 | ~2s/句 | WebUI,多语言,语速可控,阿里开源 |
| **Kokoro-82M** | <200MB | <2GB (可CPU) | B (中文社区扩展) | 不支持 | <0.3s | 超轻量,英文为主,适合实时场景 |
| **Edge-TTS** | 0 (云端) | 0 | B+ | 不支持 | 网络延迟 | 微软在线服务,免费,多音色 |
**当前主链路**VoxCPM2 为主 → CosyVoice2 为备 → Edge-TTS 为最终兜底
**当前主链路**《林夏》已落地 **Voice Design 试听 → 克隆锚定 → Style Control 表演**
```
03_gen_voice_samples.py (v4 试听,每角色 5 变体)
→ 人工选定参考 wav
→ 04_gen_tts_clone.py (v5 全量克隆)
→ audio/mp3/tts/*_wav_v1.mp3 (游戏加载)
```
API`POST /v1/speech/styled`(有 voice_id = 克隆+表演;无 voice_id = 纯 Voice Design)。
备用:CosyVoice2 → Edge-TTS 兜底。
#### 推荐部署到本地
@@ -142,18 +158,24 @@
#### 本机已有
VoxCPM2 和 CosyVoice2 均内置零样本声音克隆。当前《林夏》项目已为 12 个角色建立参考音频库
VoxCPM2 和 CosyVoice2 均内置零样本声音克隆。《林夏》**13 角色**参考库(2026-05-23 选定)
```
audio_2/tts/v4_voice_samples/ # 每角色 1 条选定 wav/mp3
voice/
linxia/ linxia_ref.wav
mom/ mom_extra_04.wav
azhe/ azhe_extra_05.wav
xiaomei/ ...
zhounan/ delivery/ hr/ anan/
dorm_a/ dorm_b/ dorm_c/
linxia/linxia_ref.wav linxia_v05
mom/mom_ref.wav mom_v01
azhe/azhe_ref.wav azhe_v03(男声)
xiaomei/xiaomei_ref.wav xiaomei_v05
xiaomei/xiaomei_drunk_ref.wav xiaomei_drunk_v05
zhounan/zhounan_ref.wav zhounan_v05(男声)
hr/ anan/ dorm_a/ dorm_b/ dorm_c/
delivery/delivery_ref.wav delivery_v04(男声)
linxia/self_3y_ref.wav self_3y_v03
```
批量脚本:`audio_2/scripts/04_gen_tts_clone.py` · 清单:`audio_2/tts/v5_cloned/clone_manifest.tsv`
#### 推荐部署到本地
| 工具 | Stars | 为什么值得 | 适用场景 |
@@ -265,5 +287,18 @@ RTX 5090 (32GB) 可同时运行的组合:
| 现状 | 升级方案 | 收益 |
|------|---------|------|
| ACE-Step 生成全部音效 | → Stable Audio Open 1.5 补充精细音效 | 44.1kHz 立体声,电话底噪/UI 音效品质更高 |
| v5 克隆已部署,待 playtest | 实机听感迭代 → 微调 `voice_style_prompts.py` 或重选 v4 参考 | 各角色区分度与情感准确度 |
| ACE-Step 生成叙事音效 | → Stable Audio Open 1.5 补充精细音效 | 44.1kHz 立体声,电话底噪/UI 音效品质更高 |
| 结局仅语音 + 字幕 | → ACE-Step/DiffRhythm 生成结局专属 BGM | 5 个结局各有独立氛围音乐,沉浸感提升 |
---
## 七、文档索引(保持一致性)
| 文档 | 用途 |
|------|------|
| `林夏.md` §7 | 设计纲要:资产分类、角色配置、文件结构 |
| `执行文档_音频素材制作.md` | 操作步骤:环境、流程、后期、QA |
| `audio_2/项目状态说明.md` | **现行状态**:端口、目录、命令、选定音色表 |
| `audio_2/角色语音风格提示词.md` | Voice Design / 表演修饰参考 |
| `audio/batch_tts_voxcpm.py` | 台词表 `LINES` + `ROLES` 语速 |
+112 -88
View File
@@ -552,70 +552,99 @@ E(隐藏,优先级 1)→ A(优先级 2)→ B(优先级 3)→ C(
| **林夏语音** | 主角对话回应(通用 + 专属) | ~55 条, ~100s | VoxCPM2 声音克隆 |
| **NPC Round 1 语音** | 各角色主要台词 | ~30 条, ~300s | VoxCPM2 声音克隆 |
| **NPC Round 2/3 反应** | 对话分支反应 | ~54 条, ~205s | VoxCPM2 声音克隆 |
| **self-3y 三版** | 时光胶囊备忘录 ×3 | 3 条, ~150s | VoxCPM2linxia 音色 |
| **self-3y 三版** | 时光胶囊备忘录 ×3 | 3 条, ~150s | VoxCPM2`self_3y_v03` 独立参考 |
| **UI 短音效** | 提示音、选择反馈、打字/发送 | ~12 种 | Web Audio 合成(无需文件) |
| **BGM** | 4 段主题音乐 | 4 | Suno / Udio 生成 |
| **环境音** | 卧室夜噪、酒吧、街声 | 4-5 段 | Freesound (CC0/CC-BY) |
| **角色铃声** | 来电铃声 | 3-4 段 | 简单合成或 Suno 短旋律 |
| **BGM** | 4 段主题音乐 | 4 | ACE-Step 1.5 本地生成 |
| **环境音** | 卧室夜噪、厨房、黎明等 | 3 段 | ACE-Step 1.5 本地生成 |
| **角色铃声** | 来电铃声 | 5 条(游戏引用 4 种场景) | ACE-Step 1.5 本地生成 |
| **叙事音效** | 敲门、心跳、呼吸、水壶等 | 4 条 | ACE-Step 1.5 本地生成 |
### 7.2 TTS 方案:VoxCPM2 本地声音克隆(唯一主链路)
### 7.2 TTS 方案:VoxCPM2 本地克隆(现行 v5 链路)
> **注意**:本项目 TTS 统一使用 **VoxCPM2**。`执行文档_音频素材制作.md` 中早期记录的 CosyVoice2 方案作为备用,不作为主生产链路。批量脚本、音色目录、QA 标准均以 VoxCPM2 为准。
> **注意**:本项目 TTS 统一使用 **VoxCPM2**。CosyVoice2 仅作备用,不作为主生产链路。
> **详细操作与目录**:见 `audio_2/项目状态说明.md`、`执行文档_音频素材制作.md`。
所有角色语音使用 **VoxCPM2**(本地部署,无需外部 API),通过声音克隆实现一致的角色音色。
**现行流程**2026-05 落地):
```
Voice Design 试听(v4,每角色 5 条提示词变体)
→ 人工选定参考 wav
→ Style Control 克隆 + 表演修饰(v5
→ 部署到 audio/mp3/tts/*_wav_v1.mp3(游戏直接加载)
```
**服务启动**(端口 **8002**8000 被其他服务占用):
**服务启动**
```bash
bash /home/xsl/AutoVideo/start-voxcpm.sh
# uvicorn 服务: http://127.0.0.1:8000
VOXCPM_PORT=8002 VOXCPM_ENABLE_DENOISER=0 bash /home/xsl/tts-server/start-voxcpm.sh
curl http://127.0.0.1:8002/health
# 预期: {"status":"ok","model":"VoxCPM2","styled_speech":true}
```
**API 接口**
- `POST /v1/voices` — 注册参考音频(wav_base64)→ 返回 voice_id
- `POST /v1/speech` — 合成语音(text + voice_id)→ 返回 WAV
| 接口 | 用途 |
|------|------|
| `POST /v1/voices` | 注册参考音频(wav_base64)→ voice_id |
| `POST /v1/speech` | 纯克隆合成(text + voice_id |
| `POST /v1/speech/styled` | Style Control:有 voice_id = 克隆+表演;无 voice_id = Voice Design |
- 输出格式:48kHz 16-bit PCM WAV
- 参数:cfg_value(默认 2.0)、inference_timesteps(默认 10
**声音克隆流程**
```
参考音频 (voice/{角色}/*.wav)
→ 转换为 16kHz mono WAV
→ POST /v1/voices 注册 → voice_id
→ POST /v1/speech 合成台词 → WAV
→ ffmpeg atempo 调速 → 最终音频
**批量生产(现行)**
```bash
# 全量克隆并部署游戏目录
VOXCPM_PORT=8002 python audio_2/scripts/04_gen_tts_clone.py --force
# 只重跑某角色
VOXCPM_PORT=8002 python audio_2/scripts/04_gen_tts_clone.py --role mom --force
# 重新生成试听样本(换提示词挑音色)
VOXCPM_PORT=8002 python audio_2/scripts/03_gen_voice_samples.py --role delivery --force
```
**游戏音频命名**:仅 `*_wav_v1.mp3``story.js` / `engine.js` 引用;`*_mp3_v1.mp3` 为旧流水线产物,已清理。
### 7.3 角色音色配置
| 角色 | 参考音频目录 | 语速 | 音色描述 |
|------|-------------|------|---------|
| **林夏** | `voice/linxia/` | 1.00 | 24 岁女生,疲惫但清醒,克制但有温度 |
| 妈妈 | `voice/mom/` | 0.92 | 50 上下,温柔不黏腻,西部口音轻微 |
| 阿哲 | `voice/azhe/` | 1.05 | 27 岁,城市男生,理性偏冷 |
| 小美 | `voice/xiaomei/` | 1.10 | 24 岁,活泼,语速快 |
| 小美(醉) | `voice/xiaomei/` | 0.95 | 同音色,降速模拟醉态 |
| 周南 | `voice/zhounan/` | 0.95 | 26 岁,温和略拘谨 |
| HR 王姐 | `voice/hr/` | 1.00 | 38 岁,职场化,疲惫的善意 |
| 安安 | `voice/anan/` | 1.15 | 23 岁,活泼,比小美更嗲 |
| 室友 A | `voice/dorm_a/` | 1.10 | 年轻女声,兴奋 |
| 室友 B | `voice/dorm_b/` | 1.00 | 年轻女声,随和 |
| 室友 C | `voice/dorm_c/` | 0.95 | 年轻女声,温柔 |
| 外卖小哥 | `voice/delivery/` | 1.20 | 30 岁,麻利 |
| self-3y | `voice/linxia/` | 1.15 | 3 年前的林夏,更明朗(同一音色,不同语速) |
参考音频来自 Voice Design 试听选定,存放在 `voice/{角色}/{角色}_ref.wav``audio_2/tts/v4_voice_samples/{角色}/`
### 7.4 批量合成脚本
| 角色 | 参考文件 | 目录 | 语速 | 音色描述 |
|------|----------|------|------|---------|
| **林夏** | `linxia_v05.wav` | `voice/linxia/` | 1.00 | 24 岁女生,疲惫但清醒,克制但有温度 |
| 妈妈 | `mom_v01.wav` | `voice/mom/` | 0.92 | 50 上下,温柔不黏腻,西部口音轻微 |
| 阿哲 | `azhe_v03.wav` | `voice/azhe/` | 1.05 | 27 岁男声,城市男生,理性偏冷 |
| 小美 | `xiaomei_v05.wav` | `voice/xiaomei/` | 1.10 | 24 岁,活泼,语速快 |
| 小美(醉) | `xiaomei_drunk_v05.wav` | `voice/xiaomei/` | 0.95 | 同闺蜜基底,降速模拟醉态 |
| 周南 | `zhounan_v05.wav` | `voice/zhounan/` | 0.95 | 26 岁男声,温和略拘谨 |
| HR 王姐 | `hr_v05.wav` | `voice/hr/` | 1.00 | 38 岁,职场化,疲惫的善意 |
| 安安 | `anan_v04.wav` | `voice/anan/` | 1.15 | 23 岁,活泼,比小美更嗲 |
| 室友 A | `dorm_a_v03.wav` | `voice/dorm_a/` | 1.10 | 年轻女声,兴奋 |
| 室友 B | `dorm_b_v02.wav` | `voice/dorm_b/` | 1.00 | 年轻女声,随和 |
| 室友 C | `dorm_c_v03.wav` | `voice/dorm_c/` | 0.95 | 年轻女声,温柔 |
| 外卖小哥 | `delivery_v04.wav` | `voice/delivery/` | **1.00** | 30 岁**男声**,北方腔,语速适中 |
| self-3y | `self_3y_v03.wav` | `voice/linxia/` | 1.15 | 3 年前的林夏,更年轻明亮(独立参考,非复用小美) |
表演修饰(warm/cold/分段等)由 `audio_2/voice_style_prompts.py``get_clone_style()` 控制;音色本身由参考 wav 锚定。
### 7.4 脚本与产物目录
| 脚本 | 用途 | 输出 |
|------|------|------|
| `audio_2/scripts/03_gen_voice_samples.py` | v4 试听(每角色 5 条) | `audio_2/tts/v4_voice_samples/` |
| `audio_2/scripts/04_gen_tts_clone.py` | **v5 全量克隆 + 部署** ★ | `audio_2/tts/v5_cloned/*_wav_v5.mp3``audio/mp3/tts/*_wav_v1.mp3` |
| `audio/batch_tts_voxcpm.py` | 台词表 `LINES`(173 条)+ 语速配置 | 旧版直连克隆,已被 v5 替代 |
| `audio_2/voice_style_prompts.py` | 表演修饰 / Voice Design 提示词 | — |
| `audio_2/voice_sample_prompts.py` | v4 试听变体与统一试听文本 | — |
**台词表**`audio/batch_tts_voxcpm.py``LINES` + `04_gen_tts_clone.py``EXTRA_LINES`self-3y ×3、系统 memo)。
**配置与文档**
```bash
# 启动 VoxCPM2 服务
bash /home/xsl/AutoVideo/start-voxcpm.sh
# 使用 WAV 参考音色,批量合成所有台词
python audio/batch_tts_voxcpm.py --source voice
# 只合成特定角色
python audio/batch_tts_voxcpm.py --source voice --role linxia
# 干跑查看任务列表
# 旧版批量(仅参考,不再用于正式产出)
python audio/batch_tts_voxcpm.py --source voice --dry-run
```
@@ -815,14 +844,13 @@ async _handleChoice(dir) {
| self-3y | 3 版 | 0 | ~3 条 | ~150s |
| **合计** | | | **~90 条** | **~835s** |
### 总计
### 总计(现行部署)
- 林夏 ~55 条,~100 秒
- NPC ~90 条,~835 秒
- **总语音约 145 条,约 15.5 分钟**
- 游戏引用 **184** 个 MP3`audio/mp3/`,已与 `story.js` / `engine.js` 对齐)
- TTS 对白 **169** 条(`tts/*_wav_v1.mp3`
- BGM + 铃声 **8** 条 · 音效 **4** 条 · 环境音 **3**
- v5 克隆产物归档 **177** 条(`audio_2/tts/v5_cloned/`,含台词表全量 + self-3y + 系统 memo
- UI 音效:13 种,全部 Web Audio 合成
- BGM4 段
- 环境音:4-5 段
---
@@ -831,39 +859,35 @@ async _handleChoice(dir) {
```
blind/
├── game/
│ ├── index.html # 入口
│ ├── index.html
│ └── js/
│ ├── main.js # 启动 + 事件绑定
│ ├── gestures.js # 7 种手势识别(含长按)
│ ├── haptics.js # 触觉反馈
│ ├── story.js # 16 条消息 + 音频引用(*_wav_v1.mp3
│ ├── engine.js # 系统语音、结局、BGM/环境音
│ ├── audio.js # 音频管理 + UI 合成音效
── story.js # 16 条消息剧情数据
│ ├── engine.js # 游戏引擎(状态机 + 对话流程)
│ ├── profile.js # 行为画像 + 状态变量
│ └── utils.js # 工具函数(sleep, dbg 等)
──
├── audio/
│ ├── mp3/
│ ├── linxia/ # 林夏语音(当前 edge-tts 版本
── react/ # NPC 反应语音(当前 edge-tts 版本)
├── 00_raw/tts/ # VoxCPM2 生成原始 WAV
└── batch_tts_voxcpm.py # VoxCPM2 批量合成脚本
├── voice/ # VoxCPM2 参考音色(WAV
│ ├── linxia/ # 林夏
│ ├── mom/ # 妈妈
│ ├── azhe/ # 阿哲
│ ├── xiaomei/ # 小美
│ ├── zhounan/ # 周南
│ ├── hr/ # HR 王姐
── anan/ # 安安
├── dorm_a/ # 室友 A
├── dorm_b/ # 室友 B
│ ├── dorm_c/ # 室友 C
│ └── delivery/ # 外卖小哥
── gdd/
│ └── redesign_v2.md # v2 重构设计文档
└── 林夏.md # 本文档(总设计纲要)
│ ├── batch_tts_voxcpm.py # 台词表 LINES + ROLES 语速
└── mp3/ # 游戏运行时音频(184 文件
── tts/ # 169 条对白
├── music/ # BGM + 铃声
├── sfx/ # 叙事音效
│ └── ambience/ # 环境音
├── voice/ # 各角色参考音频(v5 选定 *_ref.wav
├── audio_2/ # TTS v4/v5 流水线
│ ├── 项目状态说明.md
│ ├── voice_style_prompts.py
│ ├── voice_sample_prompts.py
│ ├── scripts/ # 03 试听 · 04 克隆部署 ★
── tts/
├── v4_voice_samples/ # 选定参考音色
└── v5_cloned/ # 正式产物 + clone_manifest.tsv
├── 林夏.md
├── 执行文档_音频素材制作.md
── 技术报告_音频资源制作.md
```
TTS 服务(独立部署):`/home/xsl/tts-server/`(端口 **8002**
---
## 11. 风险与对策
@@ -871,7 +895,7 @@ blind/
| 风险 | 对策 |
|------|------|
| VoxCPM2 长情绪戏(妈妈 4 分钟)质感不够 | 分段录制 + 后期拼接,预留调参时间 |
| 声音克隆音色不够区分 | 每角色选择差异大的参考音频 + 调速区分 |
| 声音克隆音色不够区分 | Voice Design 试听多变体 → 人工选定 → 克隆锚定;男声角色单独标注 |
| 60+ 分支语音管理复杂 | batch_tts_voxcpm.py 统一管理,命名规范 |
| 手势误判导致选错 | 滑动阈值 30px + 40°范围;双击间隔 250ms 内 |
| 玩家不理解手势含义 | MSG-02(小美教学关)强引导,每步正向反馈 |
@@ -902,14 +926,14 @@ blind/
## 12. 制作流程
| 阶段 | 关键交付 |
|------|---------|
| **剧本定稿** | 16 条全脚本 + 5 结局完整对白 + 所有分支台词 |
| **参考音色准备** | voice/ 下 12 个角色参考音频确认 |
| **VoxCPM2 批量合成** | ~145 条语音 + 语速调整 + 质检 |
| **BGM + 环境音** | 4 段 BGM + 环境采样 |
| **程序集成** | story.js 对接最终音频路径 + 全流程调试 |
| **测试** | 全 5 结局通关测试 + 分支覆盖 |
| 阶段 | 关键交付 | 状态 |
|------|---------|------|
| **剧本定稿** | 16 条全脚本 + 5 结局完整对白 + 所有分支台词 | ✅ |
| **参考音色准备** | v4 试听选定 13 角色参考 wav | ✅ |
| **VoxCPM2 v5 批量合成** | 177 条克隆 + 部署 `audio/mp3/tts/` | ✅ |
| **BGM + 环境音 + 音效** | ACE-Step 本地生成,游戏引用 15 条 | ✅ |
| **程序集成** | story.js 对接 `*_wav_v1.mp3` | ✅ |
| **测试** | 全 5 结局通关 + 各角色听感迭代 | 待 playtest |
---