IndexTTS 是 B 站语音团队开源的一系列语音克隆模型。
早期版本,在多场景应用中均表现惊艳,笔者也有过部署实测。
字错率和克隆相似性,均出于当时领先水平。
经过 vLLM 推理加速,RTF 可以低至 0.15,因此也是首选的语音克隆模型服务。
不过还有硬伤:
- 情感表达不够,AI 味依旧浓郁;
- 不支持语速控制,更像在读稿。
刚好最近项目中需要解决以上痛点,寻找了一圈解决方案,兜兜转转还是来到了 IndexTTS 。
因为当前市面上,无论开源 还是 闭源的语音克隆方案,上述两点都没有很好解决。
早在去年 9 月,B 站就开源了 IndexTTS-2.0 ,号称情感丰富和时长可控。
刚好借此机会,实测一番,分享给各位。
1. IndexTTS-2 简介
1.1 模型架构
相比 v1 版本,模型架构发生了不小变化:

简言之:
IndexTTS2 由三个核心模块组成:Text-to-Semantic(T2S) 、Semantic-to-Mel(S2M) 以及 BigVGANv2 声码器。
- T2S 模块:
- 输入:源文本、风格提示、音色提示、目标语音 token 数;
- 输出:语义 token 序列。
- 模型:GPT2 自回归模型
- S2M 模块:
- 输入:语义 token、音色提示;
- 输出:梅尔频谱图。
- 模型:基于流匹配的非回归生成框架
- BigVGANv2 声码器:
- 输入:梅尔频谱图
- 输出:高质量的语音波形。
1.2 亮点介绍
有哪些亮点?
- 支持语速控制:提出一种'时间编码'机制,首次解决了传统 AR 模型难以精确控制语音时长的问题。允许用户显式指定生成的 token 数量,从而实现语速控制。
- 支持情感表达:提出音色与情感解耦机制,也就是支持用户同时指定音色参考与情感参考,实现更加灵活、细腻的情感表达。
此外,模型还具备基于文本描述的情感控制能力。
如何实现?
首先定义 7 种标准情感,并建立对应的情感 embedding。用户输入自然语言,微调 Qwen3-0.6b 输出情感概率分布,加权得到最终的情感 embedding。
1.3 核心代码解读
对应模型架构部分:
# 核心模块 GPT 模型 (UnifiedVoice):负责从文本和音色参考生成语义码(codes)。
.qwen_emo = QwenEmotion(os.path.join(.model_dir, .cfg.qwen_emo_path))
.gpt = UnifiedVoice(**.cfg.gpt, use_accel=.use_accel)
.s2mel = MyModel(.cfg.s2mel, use_gpt_latent=)
.bigvgan = bigvgan.BigVGAN.from_pretrained
.normalizer = TextNormalizer(enable_glossary=)
.tokenizer = TextTokenizer(.bpe_path, .normalizer)
.emo_matrix
.spk_matrix
.mel_fn


