引言
小伙伴们好,今年8月份的时候我们出过两篇开源TTS的测评报告:文本转语音(TTS)调研报告(下篇)、文本转语音(TTS)调研报告(上篇)。今天我们来调研一下BiliBili团队于2025年9月发布的Index-TTS2模型。经过小编本地实测后,发现IndexTTS2在情感及生成音频的拟合度具有显著的突破。以下主要介绍IndexTTS2的改进优化点并结合具体代码演示其创新功能。
论文链接: https://arxiv.org/pdf/2506.21619
GitHub仓库链接: https://github.com/index-tts/index-tts.git
IndexTTS2:情感表达与时长可控的自回归零样本语音合成突破
简介
现有自回归大规模 TTS 模型在语音自然度方面具有优势,但其逐token生成机制难以精确控制合成语音的时长。这在需要严格视音频同步的应用(如视频配音)中成为显著限制。
IndexTTS2创新性地提出了一种通用且适用于自回归模型的语音时长控制方法。
该方法支持两种生成模式:一种可显式指定生成token数量以精确控制语音时长;另一种则自由自回归生成语音,同时忠实还原输入提示的韵律特征。
此外,IndexTTS2实现了情感表达与说话人身份的解耦,可独立控制音色和情感。在零样本设置下,模型能准确复刻目标音色(来自音色提示),同时完美还原指定的情感语调(来自风格提示)。
为提升高情感表达下的语音清晰度,引入GPT潜在表示,并设计了三阶段训练范式,提升生成语音的稳定性。为降低情感控制门槛,IndexTTS2基于文本描述微调Qwen3,设计了软指令机制,有效引导语音生成所需情感。多数据集实验结果表明,IndexTTS2在词错误率、说话人相似度和情感保真度方面均超越现有零样本TTS模型。音频样例见:IndexTTS2演示页面 (https://index-tts.github.io)。
模型详解
Figure 1 展示了 IndexTTS2 的完整工作流,采用了经典的三阶段级联架构 。它直观地解释了模型是如何从输入(文本、提示音频)一步步生成最终语音的。
核心流程包含三个主要模块:
- Text-to-Semantic (T2S) Module(文本到语义模块) :
- 输入 :
Text:需要合成的文本内容。Timbre Prompt:提供说话人音色(身份)的参考音频。Style Prompt:提供情感/韵律的参考音频(或通过 Qwen3 生成的文本指令转换而来)。Speech Token Num( 关键创新 ):一个可选的数字输入。
- 功能 :这是一个 自回归(Autoregressive) 模型。它负责将文本转换为代表语音内容的“语义 Token”。
- 两种模式 :
- Explicit Mode(精确模式):输入指定的 Token 数量,模型会严格按照这个长度生成,从而实现 精确的时长控制 (这对视频配音至关重要)。
- Free Mode(自由模式):不指定数量,模型像传统 GPT 一样根据内容自动决定说多久,保持最自然的韵律。
- Semantic-to-Mel (S2M) Module(语义到频谱模块) :
- 架构 :这是一个 非自回归(Non-Autoregressive) 模型,具体采用了 Flow Matching(流匹配) 技术。
- 功能 :将 T2S 生成的语义 Token 转化为声学特征(Mel-spectrogram)。
- 亮点 :这是为了解决高强度情感(如咆哮、大哭)下发音含糊的问题,通过引入 GPT 的潜在表示来增强语音的清晰度和稳定性。
- Vocoder(声码器) :
- 使用 BigVGANv2 ,将频谱图转换为最终的高保真波形音频。
其中的自回归文本到语义**(T2S)**模块如下:
原始论文Figure 2:自回归文本到语义模块详解(Autoregressive Text-to-Semantic Module)
Figure 2 深入剖析了 Figure 1 中的T2S模块,这是整个模型实现“时长可控”和“情感解耦”的大脑核心。
主要包含以下细节结构:
- 时长控制机制 :
- 图中展示了如何利用
Speech Token Num。 - 模型在输入端引入了一个 时长编码(Duration Encoding) 或特定的条件约束。这告诉自回归模型:“你必须在生成第 N 个 Token 时结束”。这打破了传统自回归模型“由于不知道什么时候结束所以无法控制时长”的魔咒。
- 情感与音色的解耦 :
-
一路是 Speaker Encoder :提取
Timbre Prompt的声纹信息(你是谁)。 -
另一路是 Emotion Adapter :提取
Style Prompt的情感韵律信息(你什么心情)。 -
红色虚线 :图中通常用红色虚线标示出 Emotion Adapter(情感适配器) 的路径。
-
双路输入 :
-
作用 :通过这种结构设计,模型强制将“情感”和“音色”分开处理。这意味着你可以用“奥巴马的声音”配上“小女孩哭泣的参考音频”,图中的结构保证了生成的语音是“奥巴马在哭”,而不是变成了“小女孩的声音”。
- 生成过程 :
- 展示了 Transformer Decoder 如何基于 文本、音色向量、情感向量 以及 时长约束,逐个预测下一个语义 Token 的过程。
IndexTTS2的主要创新点:
1、自回归模型的精确时长控制
这是该论文最大的突破点。传统的自回归TTS(如GPT类语音模型)虽然自然度高,但由于是“逐个token预测”,很难像非自回归模型那样预先设定准确的语音长度。这在视频配音(Dubbing)等需要音画同步的场景中是致命缺陷。
IndexTTS2 提出了一种对自回归模型友好的时长控制方法 ,支持两种生成模式:
- 精确控制模式(Explicit Mode) :用户可以显式指定生成的 Token 数量,从而精确控制语音时长(例如:强制这句话在3.5秒内说完)。
- 自由模式(Free Mode) :在不指定时长的情况下,模型依然能自回归地自由生成,并忠实还原参考音频的韵律。
2、情感与音色的彻底解耦
实现了说话人身份(Timbre)与情感表达(Emotion) 的独立控制。
零样本能力(Zero-Shot) :
- 你可以给一段“A人的声音”作为音色提示。
- 再给一段“B人的哭腔”作为情感提示。
- 模型能合成出“A人用哭腔说话”的语音,且两者互不干扰。这解决了以往模型中“换了情感就像换了个人”或者“学了音色却丢了情感”的问题。
3、基于自然语言的“软指令”情感控制
为了降低用户调节情感的门槛,作者利用大语言模型(Qwen3 )设计了一种软指令(Soft Instruction)机制 。
效果 :用户不需要找参考音频,也不需要调复杂的参数,直接用文字描述(例如:“带着一种压抑已久最终爆发的愤怒”),模型就能理解并生成对应情感的语音。
4、提升高情感表达下的稳定性
在合成大哭、大笑或咆哮等强烈情感时,传统TTS往往会出现发音不清、吞字或电音(哑音)现象。
创新方案 :
- 引入了 GPT 潜在表示(Latent Representations) 来增强语音内容的清晰度。
- 设计了独特的 三阶段训练范式 ,专门用于提升模型在高情感强度下的生成稳定性。
相对于初代模型,V2版本的IndexTTS通过情感调节器(Emotion Perceiver Conditioner)将Prompt音频中的情感、风格特征提取出来转换为Emotion Token拼接至speech Token用于推理。此举使得生成音频的情感及情感表现程度可以由个人输入决定,不需要与Prompt音频做一个强行绑定。
实践
因我们在之前的调研报告中已经介绍过IndexTTS基本的环境配置、脚本调用方法,故本文不再赘述。我们着重体验介绍一下其创新性调用的功能。
- 指定情感参考音频:
from indextts.infer\_v2 import IndexTTS2
tts = IndexTTS2(cfg\_path="checkpoints/config.yaml", model\_dir="checkpoints", use\_fp16=False, use\_cuda\_kernel=False, use\_deepspeed=False)
text = "What can I say, Mamba Out!"
tts.infer(spk\_audio\_prompt='examples/voice\_07.wav', text=text, output\_path="gen.wav", emo\_audio\_prompt="examples/emo\_sad.wav", verbose=True)
- 可调节情感参考音频的权重
(
emo\_alpha,范围0.0-1.0,默认1.0):
from indextts.infer\_v2 import IndexTTS2
tts = IndexTTS2(cfg\_path="checkpoints/config.yaml", model\_dir="checkpoints", use\_fp16=False, use\_cuda\_kernel=False, use\_deepspeed=False)
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
tts.infer(spk\_audio\_prompt='examples/voice\_07.wav', text=text, output\_path="gen.wav", emo\_audio\_prompt="examples/emo\_sad.wav", emo\_alpha=0.9, verbose=True)
- 可直接指定8维情感向量
[高兴, 愤怒, 悲伤, 害怕, 厌恶, 忧郁, 惊讶, 平静],可用use\_random开启随机情感采样(默认False):
注:开启随机采样会降低音色的还原度。
from indextts.infer\_v2 import IndexTTS2
tts = IndexTTS2(cfg\_path="checkpoints/config.yaml", model\_dir="checkpoints", use\_fp16=False, use\_cuda\_kernel=False, use\_deepspeed=False)
text = "哇塞!这个爆率也太高了!欧皇附体了!"
tts.infer(spk\_audio\_prompt='examples/voice\_10.wav', text=text, output\_path="gen.wav", emo\_vector=[0, 0, 0, 0, 0, 0, 0.45, 0], use\_random=False, verbose=True)
- 可用
use\_emo\_text根据文本自动生成情感向量 ,可用use\_random开启随机情感采样
from indextts.infer\_v2 import IndexTTS2
tts = IndexTTS2(cfg\_path="checkpoints/config.yaml", model\_dir="checkpoints", use\_fp16=False, use\_cuda\_kernel=False, use\_deepspeed=False)
text = "快躲起来!是他要来了!他要来抓我们了!"
tts.infer(spk\_audio\_prompt='examples/voice\_12.wav', text=text, output\_path="gen.wav", emo\_alpha=0.6, use\_emo\_text=True, use\_random=False, verbose=True)
- 可直接
指定情感文本描述
(
emo\_text),实现文本与情感分离控制:
from indextts.infer\_v2 import IndexTTS2
tts = IndexTTS2(cfg\_path="checkpoints/config.yaml", model\_dir="checkpoints", use\_fp16=False, use\_cuda\_kernel=False, use\_deepspeed=False)
text = "快躲起来!是他要来了!他要来抓我们了!"
emo\_text = "你吓死我了!你是鬼吗?"
tts.infer(spk\_audio\_prompt='examples/voice\_12.wav', text=text, output\_path="gen.wav", emo\_alpha=0.6, use\_emo\_text=True, emo\_text=emo\_text, use\_random=False, verbose=True)
最后,拼音使用注意事项:
IndexTTS2依然支持中文字符与拼音混合建模。 在使用时,如果需要精确的发音控制,请输入包含特定拼音标注的文本来触发拼音控制功能。 需要注意的是:拼音控制并不是对所有声母韵母(辅音、元音)组合都生效,系统仅保留中文合法拼音的发音。 具体合法情况可参考项目中的
checkpoints/pinyin.vocab文件。
总结
IndexTTS2 的开源标志着零样本语音合成技术迈入了一个新阶段。它不仅首次在自回归架构中实现了精确的时长控制 ,更通过情感与音色的有效解耦 ,赋予用户前所未有的表达自由度。无论是通过情感参考音频、8维情感向量,还是纯文本描述,用户都能以极低门槛精准引导合成语音的情绪走向,真正做到了“所想即所声”。
相较于初代 IndexTTS,V2 版本在情感细腻度、语音稳定性与多模态控制能力上实现了质的飞跃。尤其在视频配音、虚拟角色演绎、有声内容创作等对节奏与情绪高度敏感的场景中,IndexTTS2 展现出强大的实用潜力。
更重要的是,BiliBili 团队选择全面开源模型权重与推理代码 ,并提供丰富灵活的 API 接口,极大降低了前沿语音技术的使用门槛,为学术研究与产业应用铺平了道路。正如其口号所言——“The Future of Voice, Now Generating”,IndexTTS2 不仅是技术的突破,更是通向下一代人机语音交互的重要一步。
