同一台机器(RTX 5060 Ti 16GB)本地推理。两段中文文本,统一的参考音频(clone_1.wav, 4.2s 中文女声)用于克隆类模型。
参考/训练数据:ow2voice 项目 383 条人工审校台词(10.5 分钟,48kHz→24kHz)。Qwen3-TTS-Base 用官方 SFT 全参微调 3 epochs(8-bit AdamW 适配 16GB 显存);IndexTTS-2.5 与 MOSS-v1.5 无本机训练条件,用统一参考音频(3.4s「还以为他们死了,看来还没死透。」)零样本克隆。
Qwen-FT:微调自 Base,官方文档称 instruct 仅 CustomVoice 支持,实测微调 speaker 的 instruct 接口可调用(效果请耳朵裁决);IndexTTS-2.5:8维情感向量(happy/angry/sad/afraid/disgusted/melancholic/surprised/calm);MOSS:无情感接口,只能改写文本本身。
不给任何情感参数,考验模型从文本语义自主判断语气的能力(播报/游戏语音聊天场景核心需求)。注意:IndexTTS/MOSS 无参考音频则无雾子音色,此轮它们仅以参考音频定音色(情感默认继承参考),文本语义由各自模型自由发挥。
素材:user_base_55s.wav(55秒雾子治疗台词朗读)自动切段 → SenseVoice-small 一步出文本+情绪标签 → 情绪路由:② IndexTTS 8维向量映射表 ③ IndexTTS emo_audio_prompt 检索同情绪真实雾子台词(音色雾子、情感也是真雾子演的) ④ Qwen-FT instruct 模板。MOSS 无情感通道未参与。
已知问题:SenseVoice 对短促女声偏判 ANGRY(383条索引中占74%);本素材 11 段全为平静台词(内容本身平缓),路由多样性需换带情绪的语音素材验证。
测试时间:2026-08-30 | 测试机器:Linux + NVIDIA RTX 5060 Ti 16GB(Blackwell, sm_120, CUDA 13.0 驱动)| 全部本地推理 测试文本:①《西游记》第一回"石猴出世"(公版,约 230 字)②《情深深雨濛濛》小说节选(约 250 字,情感对白) 克隆参考音频:clone_1.wav(4.2s 中文女声,Qwen 官方示例音频),三个克隆配置统一使用
| Qwen3-TTS-12Hz-1.7B | IndexTTS-2.5 | MOSS-TTS-v1.5 | |
|---|---|---|---|
| 出品方 | 阿里通义千问(QwenLM) | B站(IndexTeam) | 复旦 OpenMOSS 团队 |
| 开源协议 | Apache-2.0 | bilibili 模型许可(限制商用) | Apache-2.0 |
| HF 下载量级(本次查询时) | Base 302万 / CustomVoice 240万 | 9.7万 | 39.9万 |
| 架构范式 | 离散多码本 LM 全端到端("Talker"结构,绕开 LM+DiT 级联) | GPT 自回归骨干(~0.8B) + flow-matching s2mel + BigVGAN 声码器 | LM 延迟模式(delay pattern) + 32 码本音频 tokenizer |
| 语言底座 | Qwen3 系自研 talker | Qwen0.6B-emo4 情感 LM | Qwen3-4B(36层/4096 hidden) |
| 权重体积 | 1.7B(4.3GB)+ 0.68GB speech tokenizer | 共 5.5GB(gpt 3.3G + s2mel 0.4G + codec 0.6G + qwen0.6b 1.2G) | ~8.5B(17GB bf16) |
| 采样率 | 24kHz | 22.05kHz(README)/ config 24kHz | 24kHz |
| 支持语言 | 10 语种(中英日韩德法俄葡西意) | 5 语种(中英日西阿) | 31 语种(含粤语) |
| 音色获取 | CustomVoice: 9 个内置高级音色 + 指令控制;Base: 3 秒快速克隆 | 零样本克隆(参考音频) | 零样本克隆(参考音频),也支持无参考直接合成 |
| 情感控制 | 自然语言 instruct 指令 | 8 维情感向量(happy/angry/sad/afraid/disgusted/melancholic/surprised/calm),音色与情感解耦 | 无显式接口,靠文本语义自适应 |
| 发音控制 | — | 拼音 <行\|XING2>、CMU 音素、日文假名 |
拼音 tone 标注 + IPA |
| 特色能力 | 流式/非流式一体,双轨混合流式架构,端到端延迟低至 97ms;VoiceDesign 文字描述设计音色 | 语速控制 duration_factor(0.5-2.0)、跨语种迁移、长文本 | 显式停顿 [pause 3.2s]、token 级时长控制、Continuation 前缀续写、code-switching |
| Qwen3-TTS | IndexTTS-2.5 | MOSS-TTS-v1.5 | |
|---|---|---|---|
| 安装方式 | pip install qwen-tts(官方 PyPI 包) |
GitHub 仓库 + uv sync(python 3.10-3.11 强约束) |
GitHub 仓库 + transformers==5.0.0 |
| Python 要求 | 3.12 推荐 | 3.10–3.11 | ≥3.10 |
| 依赖重量 | 轻 | 重(keras/opencv/modelscope 等) | 中 |
| 显存需求 | ~4-6GB | ~6GB | bf16 全量 17GB > 16GB,需 device_map="auto" 部分层落 CPU |
| 推理接口 | generate_custom_voice / generate_voice_clone / generate_voice_design |
IndexTTS2.infer(spk_audio_prompt, text, lang, emo_vector, duration_factor) |
transformers AutoModel/AutoProcessor + build_user_message,标准 HF 生态 |
| 首跑额外下载 | 无(tokenizer 打包在仓库里) | 4 个辅助模型(w2v-bert-2.0 / MaskGCT semantic codec / CAMPPlus / BigVGAN) | 无 |
| RTX 5060 Ti 兼容 | 需 torch cu128 | torch 2.8+(默认 cu128 轮子) | torch 2.9.1+cu128(pyproject 明确指定) |
统一流程:同一参考音频(clone_1.wav)做克隆、同一对文本、串行独占 GPU。RTF = 生成耗时 / 音频时长(<1 即快于实时)。
| 配置 | 加载 | 西游记(230字) | 情深深(250字) | RTF | 采样率 |
|---|---|---|---|---|---|
| Qwen3-TTS 1.7B CustomVoice(预设音色 Vivian + 指令控制) | 2.8s | 55.7s 音频 / 40.2s 生成 | 75.4s / 53.8s | 0.72 | 24kHz |
| Qwen3-TTS 1.7B Base(3 秒声音克隆) | ~3s | 50.5s / 36.4s | 49.9s / 35.3s | 0.71 | 24kHz |
| IndexTTS-2.5(克隆 + 情感向量) | 14.0s | 50.3s / 33.3s | 66.4s / 43.8s | 0.66 | 22.05kHz |
| MOSS-TTS-v1.5(8B,克隆,Qwen3 主干 int8 量化) | 15.5s | 69.7s / 115.8s | 75.0s / 124.0s | 1.65 | 24kHz |
要点:
- 速度:IndexTTS-2.5 与 Qwen3-TTS 都明显快于实时(RTF 0.66-0.72);MOSS 8B 即便量化后仍超实时(1.65),消费级显卡上适合离线场景。
- 显存:Qwen ≈ 5GB、IndexTTS ≈ 7GB、MOSS 量化后 ≈ 10GB(另有 7.1GB fp32 音频 tokenizer 放 CPU)。bf16 全量跑 MOSS 需要 24GB 卡。
- 踩坑记录(对复现者最有价值的部分):
1. IndexTTS-2.5 的 HF 权重与 GitHub main 的 infer_v2_5.py 存在版本错位:tiktoken 词表 58836 vs text_embedding 12001 行,直接按 README 跑会 CUDA device-side assert(embedding 越界,且 CPU 路径异常被吞、静默无产物)。解法:走 infer_v2 路径(bpe.model + config.yaml 自洽),emo_vector 等功能不受影响;官方已知问题是 #748(canonical 的 configs/config_v2_5.yaml 在两个 hub 上都 404)。
2. MOSS 17GB bf16 装不进 16GB 卡;bnb/fnf4/torchao 的 transformers 5.0 量化加载路径都先物化全量 bf16 再量化导致 OOM。解法:CPU 加载 → 仅对 Qwen3 主干 quantize_(language_model, int8_weight_only()) → 整体上 GPU;audio_tokenizer(7.1GB fp32) 留 CPU。速度从 4s/token 提升到 8.6 it/s。
3. torchaudio 2.9 的 load/save 依赖 torchcodec,三个环境都要补装。
生成均成功、无中途截断或复读崩溃。以下为 ffmpeg volumedetect 客观指标(试听请打开网页播放器,建议按"音色相似度→中文韵律→标点停顿→情感表达"四个维度对比):
| 文件 | 时长 | mean_volume | max_volume | 备注 |
|---|---|---|---|---|
| qwen_custom/qingshen | 75.4s | -21.6 dB | -1.3 dB | 电平显著高于其他配置(instruct 情感指令或推高了响度) |
| qwen_custom/xiyouji | 55.7s | -23.4 dB | -2.0 dB | 同上 |
| qwen_clone 两段 | ~50s | -36~-38 dB | -17.5 dB | 克隆参考音色,语速较快(同文本音频最短) |
| indextts25 两段 | 50.3s/66.4s | -34~-36 dB | -12~-18 dB | 情沉段比西游段响 1.5dB,情感向量有效果迹象 |
| moss_v15 两段 | 69.7s/75.0s | -39~-41 dB | -22 dB | 响度最低、时长最长,符合其保守稳态韵律风格 |
建议听点: 1. 多音字:西游记段落里"石猴""迸裂""甲子",情深深段落里"还(huán/hái)"——考验文本前端。 2. 古典白话韵律:西游记是明代白话,长句多逗号,看谁的停顿更自然;MOSS 官方强调标点跟随,IndexTTS-2.5 主打拼音可控。 3. 情感对比:情深深段落三家分别用了 instruct(Qwen CV)、情感向量 sad+melancholic(IndexTTS)、纯文本语义(MOSS)。 4. 音色一致性:IndexTTS/MOSS/Qwen-Clone 用同一参考音频,可直接对比谁更像参考音色;Qwen-CV 是内置音色 Vivian,单独欣赏。
数据源:~/tmp/ow2voice/data/clean_pairs/kiriko/(守望先锋2 国服雾子台词,383 对音频+人工审校中文转写,约 10.5 分钟,重采样 48k→24kHz)。统一参考音频取 3.4s 干净台词(已排除出训练集)。
| 配置 | 方式 | 西游记 | 情深深 | RTF |
|---|---|---|---|---|
| Qwen3-TTS-1.7B-Base | 官方 SFT 全参微调(lr=2e-6,2 epochs,8-bit AdamW,13GB 显存) | 43.8s | 46.9s | 0.76 |
| IndexTTS-2.5 | 零样本克隆(3.4s 参考) | 39.9s | 64.7s | 0.67 |
| MOSS-TTS-v1.5 | 零样本克隆(同参考) | 57.6s | 64.2s | 1.68 |
训练与微调要点(复现注意):
- Qwen 官方 sft_12hz.py 在 16GB 卡上直接跑会 OOM(fp32 AdamW 状态 ~13.6GB),换 bitsandbytes AdamW8bit + sdpa 注意力后 13GB 稳定跑完
- lr 是生死线(踩坑实录):首次按 shell 示例 lr=2e-5 训 3 epochs,模型语言能力灾难性崩坏(ASR 实测输出为中英混杂胡话,长文本 165s ≈ 1.4字/秒的呓语)。ASR 退化曲线:epoch-0 完好 → epoch-1 起崩。改用 README 正文示例 lr=2e-6 × 2 epochs 后输出完全可懂(whisper 转写全程跟上原文),语速恢复正常(~3.5字/秒)。小数据集(10 分钟)全参微调务必从小 lr 起步,且每个 epoch 存 checkpoint 逐个 ASR 验收
- 训练 codes 质量验证方法:检查 train_with_codes.jsonl 的码本形状/值域/时长一致性(14 码本 RVQ、值域 2-2038、步数≈时长×12Hz)
- 微调后 speaker 列表变为 ['kiriko'],推理直接 generate_custom_voice(speaker="kiriko"),无需参考音频
- IndexTTS-2.5 / MOSS 官方均无单卡训练路线(前者无训练代码,后者全参 SFT 按 8 卡 FSDP 设计),按其官方主路线零样本克隆参赛
应用目标:播报 + 游戏内语音聊天——用户不可能手动调语气,TTS 需要自主判断语气。两条思路同时验证:
6 句情感内含句(游戏体/播报体/情绪句)零控制过三家雾子音色,产物见网页「自主语气对比」区。能力分层(基于架构与实测):
| 模型 | 文本自主度 | 机制 |
|---|---|---|
| Qwen3-TTS | ⭐⭐⭐ | 语义驱动是设计核心,叹号/语气词直接影响韵律 |
| MOSS-v1.5 | ⭐⭐ | 标点跟随 + 语义自适应,无显式情感接口反而"纯文本驱动" |
| IndexTTS-2.5 | ⭐ | 情感与音色解耦设计,不给向量时情感继承参考音频(源码 merge_emovec 实证),文本只影响内容 |
链路:user_base_55s.wav 自动切段 → SenseVoice-small(一步出文本+情绪标签)→ 情绪路由 → TTS
models/(权重)、repos/(推理代码)、venvs/(三套隔离环境)、scripts/(生成脚本)、output/(音频产物)、texts/(测试文本)、assets_ref/(参考音频)scripts/gen_qwen.py --mode custom|clone、scripts/gen_index.py、scripts/gen_moss.py