# 《林夏》音频素材本地制作执行文档 > **前置文档**:`林夏.md`(游戏设计)、`SOP_AI音频生产.md`(生产规范) > **现行状态**:`audio_2/项目状态说明.md`(v5 音色、目录、命令,**以此为准**) > **执行环境**:本机 WSL2 · RTX 5090 32GB · FFmpeg 7.0 > **TTS 主链路**:**VoxCPM2**(Voice Design 试听 → 克隆 → Style Control 表演),脚本 `audio_2/scripts/04_gen_tts_clone.py` > **TTS 备用**:CosyVoice2-0.5B(见附录 B) > **目标**:按 SOP 规范在本地生产全部音频素材 --- ## 0. 本机资源清单 | 资源 | 路径 / 状态 | 用途 | |---|---|---| | **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 / ACE-Step 推理 | | MuseTalk | `/home/xsl/work/MuseTalk` | **注意:这是唇形同步工具,不是 TTS** | > **端口说明**:8000 被 head3d 占用,TTS 固定使用 **8002**(`VOXCPM_PORT=8002`)。 > **游戏运行时音频**:`audio/mp3/`(184 文件,仅保留 `story.js` / `engine.js` 引用的 `*_wav_v1.mp3` 等)。 > CosyVoice2 保留作为备用,仅在 VoxCPM2 表现不佳时切换。 --- ## 1. 环境部署 ### 1.1 创建项目目录结构 ```bash cd /home/xsl/blind mkdir -p audio/{00_raw/{tts,music,sfx,ambience,ringtone},01_processed/{tts,music,sfx,ambience,ringtone},02_final/{tts,music,sfx,ambience,ringtone},03_qa_reports,99_legal} mkdir -p voice/{linxia,mom,azhe,xiaomei,zhounan,hr,anan,dorm_a,dorm_b,dorm_c,delivery,system} # 各角色参考音频 ``` ### 1.2 启动 VoxCPM2 服务 ```bash 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:8002/health # 预期: {"status":"ok","model":"VoxCPM2","styled_speech":true} ``` **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 ```bash ffmpeg -version | head -1 # 预期输出: ffmpeg version 7.0.2-static # 测试 loudnorm 滤镜 ffmpeg -f lavfi -i "sine=frequency=440:duration=1" -af "loudnorm=I=-16:TP=-1:LRA=11" -y /tmp/test_loudnorm.wav echo "FFmpeg loudnorm 可用" ``` --- ## 2. 角色参考音频准备(关键步骤) VoxCPM2 的声音克隆需要**每个角色一段参考音频**(WAV)。**现行方案**:先用 Voice Design 生成试听变体,人工选定后作为永久参考。 ### 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 岁,温柔克制 | 真人录音或影视截取 | | `azhe` 阿哲 | 27 岁男声,理性偏冷 | 播客/有声书截取 | | `delivery` 外卖小哥 | 30 岁北方男声 | 语速适中,非过快 | | … | 见 `林夏.md` §7.3 | — | --- ## 3. TTS 生产流程 ### 3.0 现行主力:v5 克隆流水线 ★ **前置**:VoxCPM2 已启动(§1.2),参考音频已在 `v4_voice_samples/` 每角色 1 条。 ```bash cd /home/xsl/blind # 全量克隆 + 自动部署游戏目录 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 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 ``` 输出原为 `audio/00_raw/tts/`,现正式产物见 `audio_2/tts/v5_cloned/` 与 `audio/mp3/tts/`。 ### 3.3 长戏分段处理 SOP §5.3 规定:**超过 30 秒的台词必须分段录制**。 **妈妈 4'17" 长语音(第 16 条)分 8 段**: | 段号 | 文件名 | 台词 | 情绪提示 | |---|---|---|---| | 1 | `lv11_0200_mom_voice_01_seg1` | "夏夏。妈妈知道你今天电话不接。妈妈不催你,就是想跟你说一件事。" | gentle, hesitant | | 2 | `lv11_0200_mom_voice_01_seg2` | "你24了对吧。妈妈24那年——你应该没听我说过——" | gentle, nostalgic | | 3 | `lv11_0200_mom_voice_01_seg3` | "那时候妈妈在广州,给一个香港老板做秘书,1995年。那年我也被分手过。也被开除过。一模一样的春天。" | gentle, sad but holding back | | 4 | `lv11_0200_mom_voice_01_seg4` | "那年我哭得特别难看。后来呢?后来就没什么后来了。我回了老家,认识了你爸,生了你。" | gentle, releasing | | 5 | `lv11_0200_mom_voice_01_seg5` | "我跟你说这个不是想跟你说什么都会过去——我想跟你说,那年夏天我没死,是因为我外婆每天晚上都给我打一个电话。" | gentle, emotional | | 6 | `lv11_0200_mom_voice_01_seg6` | "她不说什么,就问我今天吃饭了没。" | gentle, peaceful | | 7 | `lv11_0200_mom_voice_01_seg7` | "我现在打给你,你不接也没事。妈妈给你发个语音,你什么时候想听就听。你不用回我。" | gentle, tender | | 8 | `lv11_0200_mom_voice_01_seg8` | "你今天接了好多电话吧。妈妈不打扰你了。晚安。" | gentle, almost smiling | 每段单独合成后用 FFmpeg 拼接(见 §4.3)。 **小美醉语音(第 09 条)分 4 段**,speed 调低到 0.95,每段间加长停顿。 **周南 4 段长讲述(第 13 条)** 每段独立合成,段间留 800ms 静音。 ### 3.4 系统 TTS 系统提示音(内容警告、暂停、热线、等待回复、memo 等)**现行方案**: - 大部分系统语音用 **林夏音色**(`linxia_ref.wav`)克隆,见 `LINES` 中 `v2_sys_*` 与 `lv11_sys_memo_01` - 合成走 v5 流水线,与对白同一套参考 ### 3.5 self-3y 三版预录 **现行**:独立参考 `self_3y_v03.wav`(非复用小美),角色 key 为 `self_3y`,speed 1.15。 | 版本 | 文件名 | 情绪 | |---|---|---| | 明朗版 | `lv11_0030_self3y_voice_01` | 兴奋带紧张 | | 迷茫版 | `lv11_0030_self3y_voice_02` | 疲惫假装坚强 | | 温柔版 | `lv11_0030_self3y_voice_03` | 平静有力 | 台词见 `audio_2/scripts/04_gen_tts_clone.py` → `EXTRA_LINES`。 --- ## 4. 后期处理(FFmpeg) ### 4.1 单条 TTS 标准处理链 ```bash # 变量 INPUT="audio/00_raw/tts/lv11_2103_mom_call_01_v1.wav" OUTPUT="audio/01_processed/tts/lv11_2103_mom_call_01_v1.wav" # 完整处理链(一条命令): # [1] 高通 80Hz 去低频噪 # [2] 压缩器 4:1 # [3] 响度归一化到 -16 LUFS # [4] 限制峰值 -1 dBTP ffmpeg -i "$INPUT" \ -af "highpass=f=80,\ acompressor=threshold=-18dB:ratio=4:attack=20:release=250,\ loudnorm=I=-16:TP=-1:LRA=11,\ alimiter=limit=0.891" \ -ar 48000 -sample_fmt s16 -ac 1 \ -y "$OUTPUT" ``` ### 4.2 加听筒效果(电话 / 微信语音形态) ```bash INPUT="audio/01_processed/tts/lv11_2103_mom_call_01_v1.wav" OUTPUT="audio/01_processed/tts/lv11_2103_mom_call_01_v1_phone.wav" # 模拟手机听筒: HPF 300Hz + LPF 3.4kHz + 轻微饱和 ffmpeg -i "$INPUT" \ -af "highpass=f=300:poles=2,\ lowpass=f=3400:poles=2,\ equalizer=f=1500:t=q:w=1:g=1,\ acompressor=threshold=-20dB:ratio=3:attack=5:release=50" \ -y "$OUTPUT" ``` > **例外**:`mom` 第 16 条 4'17" 长语音**不加听筒效果**——SOP 设计意图是"完整音质版"。 ### 4.3 长戏分段拼接 ```bash # 1. 先给每段加 200ms 静音头尾 for seg in audio/00_raw/tts/lv11_0200_mom_voice_01_seg*.wav; do ffmpeg -i "$seg" \ -af "adelay=200|200,apad=pad_dur=0.2" \ -y "${seg%.wav}_padded.wav" done # 2. 生成拼接文件列表 ls audio/00_raw/tts/lv11_0200_mom_voice_01_seg*_padded.wav | \ sed "s/^/file '/" | sed "s/$/'/" > /tmp/concat_list.txt # 3. 拼接 + crossfade ffmpeg -f concat -safe 0 -i /tmp/concat_list.txt \ -af "acrossfade=d=0.05:c1=tri:c2=tri" \ -y audio/00_raw/tts/lv11_0200_mom_voice_01_full.wav # 注意:FFmpeg concat + acrossfade 只支持两个输入。 # 多段拼接需要逐段 crossfade,或直接 concat 后人工检查接缝。 # 推荐方案:先 concat 拼接,段间 200ms 静音已经足够自然。 ffmpeg -f concat -safe 0 -i /tmp/concat_list.txt \ -c copy \ -y audio/00_raw/tts/lv11_0200_mom_voice_01_full.wav ``` ### 4.4 批量后期处理脚本 ```bash #!/bin/bash # 批量处理 00_raw/tts/ → 01_processed/tts/ # 用法: bash audio/process_tts.sh for f in audio/00_raw/tts/lv11_*.wav; do basename=$(basename "$f") output="audio/01_processed/tts/$basename" # 跳过已处理的 [ -f "$output" ] && echo "跳过: $basename" && continue echo "处理: $basename" ffmpeg -i "$f" \ -af "highpass=f=80,\ acompressor=threshold=-18dB:ratio=4:attack=20:release=250,\ loudnorm=I=-16:TP=-1:LRA=11" \ -ar 48000 -sample_fmt s16 -ac 1 \ -y "$output" 2>/dev/null echo " → $output" done echo "TTS 后期处理完成" ``` ### 4.5 最终打包(wav → ogg) ```bash #!/bin/bash # 01_processed → 02_final (ogg Vorbis q=5) for f in audio/01_processed/tts/*.wav; do basename=$(basename "${f%.wav}.ogg") output="audio/02_final/tts/$basename" ffmpeg -i "$f" -c:a libvorbis -q:a 5 -y "$output" 2>/dev/null done echo "OGG 打包完成" ``` ### 4.6 角色专属后期(按 SOP §4.2 配置卡) ```bash # mom: 高频衰减 -3dB + 轻 reverb ffmpeg -i input.wav -af "equalizer=f=5000:t=h:w=2000:g=-3" -y output.wav # azhe: 中频衰减 -2dB("闷"感) ffmpeg -i input.wav -af "equalizer=f=2000:t=q:w=1:g=-2" -y output.wav # delivery: 低频衰减 -6dB(模拟听筒) ffmpeg -i input.wav -af "equalizer=f=200:t=h:w=200:g=-6" -y output.wav # self-3y: 高频衰减 -2dB + 底噪(录音笔质感) ffmpeg -i input.wav \ -af "equalizer=f=5000:t=h:w=2000:g=-2" \ -y output.wav # 底噪可以后续叠加一层轻微白噪声 ``` --- ## 5. 音乐素材(ACE-Step 本地 + Suno 备选) **现行产出**:BGM 4 轨 + 铃声 5 条,均由 **ACE-Step 1.5** 本地生成,已部署至 `audio/mp3/music/`。 Suno 仍可作为备选(按 SOP §6 操作): ### 5.1 操作步骤 1. 登录 Suno(需要 Pro 订阅) 2. 选 Custom Mode 3. 按 SOP §6.2 的 4 段曲 Prompt 生成 4. 每段跑 2 轮(出 4 首候选),选最佳 5. 用 Extend 延长到目标时长 6. 下载 WAV 格式到 `audio/00_raw/music/` ### 5.2 铃声生成 按 SOP §6.3 的 9 个角色铃声 Prompt 在 Suno 生成。 下载到 `audio/00_raw/ringtone/`。 ### 5.3 音乐后期处理 ```bash # 音乐处理: 削 AI 浊感 + 响度 -18 LUFS for f in audio/00_raw/music/*.wav; do basename=$(basename "$f") ffmpeg -i "$f" \ -af "equalizer=f=350:t=q:w=1.5:g=-2,\ loudnorm=I=-18:TP=-1:LRA=11" \ -ar 48000 \ -y "audio/01_processed/music/$basename" 2>/dev/null done ``` --- ## 6. 音效素材(ACE-Step 本地 + ElevenLabs 备选) **现行产出**:叙事音效 4 条(敲门、心跳、呼吸、水壶)在 `audio/mp3/sfx/`,由 ACE-Step 生成。 ElevenLabs SFX 仍可作为备选: ### 6.1 操作步骤 1. 登录 ElevenLabs(Creator 订阅,含 Sound Effects) 2. 按 SOP §7.2 的 Prompt 逐条生成 3. **每条跑 3 次**,挑最佳 4. 下载后转 WAV: ```bash # ElevenLabs 默认 mp3,转为 wav for f in audio/00_raw/sfx/*.mp3; do ffmpeg -i "$f" -ar 48000 -y "${f%.mp3}.wav" && rm "$f" done ``` ### 6.2 音效后期 ```bash # 短音效响度 -14 LUFS for f in audio/00_raw/sfx/*.wav; do basename=$(basename "$f") ffmpeg -i "$f" \ -af "loudnorm=I=-14:TP=-1:LRA=11" \ -ar 48000 \ -y "audio/01_processed/sfx/$basename" 2>/dev/null done ``` --- ## 7. 环境底噪(Freesound) ### 7.1 操作步骤 1. 按 SOP §8.1 的清单在 Freesound 搜索 2. 过滤:CC0 优先,≥ 44.1kHz,下载 WAV 3. 文件名加 Freesound ID:如 `amb_apartment_night_fs123456.wav` 4. **立刻登记到版权表** ### 7.2 环境底噪后期 ```bash # 环境底噪处理: HPF 60Hz + LPF 12kHz + 响度 -22 LUFS for f in audio/00_raw/ambience/*.wav; do basename=$(basename "$f") ffmpeg -i "$f" \ -af "highpass=f=60,lowpass=f=12000,\ loudnorm=I=-22:TP=-3:LRA=11" \ -ar 48000 -ac 2 \ -y "audio/01_processed/ambience/$basename" 2>/dev/null done ``` ### 7.3 单声道转假性立体声 ```bash # 如果下载到的是单声道,做假性立体声 INPUT="audio/01_processed/ambience/amb_apartment_night.wav" OUTPUT="audio/01_processed/ambience/amb_apartment_night_stereo.wav" ffmpeg -i "$INPUT" \ -filter_complex "\ [0:a]asplit=2[L][R];\ [R]adelay=12|12,equalizer=f=8000:t=q:w=1:g=1[Rd];\ [L][Rd]amerge=inputs=2[out]" \ -map "[out]" -ac 2 \ -y "$OUTPUT" ``` --- ## 8. QA 验收 ### 8.1 响度检查脚本 ```bash #!/bin/bash # 检查所有已处理音频的响度 echo "=== TTS 响度检查 (目标 -16 LUFS) ===" for f in audio/01_processed/tts/*.wav; do result=$(ffmpeg -i "$f" -af "loudnorm=print_format=json" -f null - 2>&1 | \ grep -A1 '"input_i"' | tail -1 | tr -d ' ",' | cut -d: -f2) echo " $(basename "$f"): ${result} LUFS" done echo "" echo "=== 音乐响度检查 (目标 -18 LUFS) ===" for f in audio/01_processed/music/*.wav; do result=$(ffmpeg -i "$f" -af "loudnorm=print_format=json" -f null - 2>&1 | \ grep -A1 '"input_i"' | tail -1 | tr -d ' ",' | cut -d: -f2) echo " $(basename "$f"): ${result} LUFS" done echo "" echo "=== 环境底噪响度检查 (目标 -22 LUFS) ===" for f in audio/01_processed/ambience/*.wav; do result=$(ffmpeg -i "$f" -af "loudnorm=print_format=json" -f null - 2>&1 | \ grep -A1 '"input_i"' | tail -1 | tr -d ' ",' | cut -d: -f2) echo " $(basename "$f"): ${result} LUFS" done ``` ### 8.2 验收流程 1. **自检**:跑响度检查脚本,确认所有文件在目标范围 ±1 LUFS 2. **单条听感**:用耳机逐条听,标记不满意的(记录到 `03_qa_reports/`) 3. **上下文听感**:把同一时间段的所有音频按时间轴拼起来完整听一遍 4. **不满意的重做**:回到 §3 重新合成,调参或换参考音频 --- ## 9. 执行顺序总结(现行状态 2026-05-23) ``` ✅ 第 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 · 常见问题 **Q: VoxCPM2 生成的语音有电流声/杂音?** A: 检查参考音频质量。参考音频必须干净无噪,采样率 ≥ 16kHz。 **Q: 语速不自然?** A: 用 FFmpeg atempo 调速(范围 0.5-2.0)。如果调速后音质下降,改为在合成文本中加标点控制节奏(句号=长停顿,逗号=短停顿)。 **Q: 怎样让同一个音色听起来"醉了"?** A: TTS 通常没有情绪控制参数。替代方案: 1. 在文本中插入省略号、重复字来模拟口齿不清 2. 后期用 FFmpeg 轻微变速+加混响: ```bash ffmpeg -i drunk.wav -af "atempo=0.95,aecho=0.8:0.7:40:0.3" -y drunk_fx.wav ``` **Q: VoxCPM2 服务无法启动?** A: 确认 `bash /home/xsl/AutoVideo/start-voxcpm.sh` 正常。确认 GPU 可用:`nvidia-smi`。 **Q: 生成很慢?** A: RTX 5090 应该很快(远超实时)。如果慢,检查是否误用了 CPU。 --- ## 附录 B · CosyVoice2 备用方案 > **仅在 VoxCPM2 表现不佳或不可用时使用。** 正常生产流程请走 §1-§3 的 VoxCPM2 主链路。 ### B.1 环境验证 ```bash conda activate cosyvoice cd /home/xsl/tools/CosyVoice python -c " import sys sys.path.append('third_party/Matcha-TTS') from cosyvoice.cli.cosyvoice import CosyVoice2 model = CosyVoice2('pretrained_models/CosyVoice2-0.5B') print('CosyVoice2 加载成功,采样率:', model.sample_rate) " ``` ### B.2 WebUI 启动 ```bash conda activate cosyvoice cd /home/xsl/tools/CosyVoice python webui.py --port 8001 # 注意:用 8001 避免与 VoxCPM2 的 8000 端口冲突 ``` 模式选择:**3s极速复刻**(上传参考音频 + 对应文字 → 合成)。 ### B.3 批量脚本 CosyVoice2 版批量脚本为 `audio/batch_tts.py`(区别于主力脚本 `audio/batch_tts_voxcpm.py`)。 用法:`conda activate cosyvoice && python audio/batch_tts.py`