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