大家好,今天为大家带来一个强大的开源语音合成项目 Index-TTS2 的详细教程。无论是想实现高保真的语音克隆 ,还是合成带有丰富情感的语音,这个项目都能提供出色的效果。本教程将手把手带你完成从环境准备、模型下载到实际推理的全过程,并附上多种使用场景的代码示例,帮你快速上手。
环境概览
在开始之前,请确保你的系统满足以下条件,这是成功运行的基础:
- 操作系统: Linux (Windows可通过WSL2或传输文件方式操作,文中会说明)
- Python: 3.10
- CUDA: 12.8 或更高版本 (至关重要,版本不匹配会导致运行失败)
- 显存 : 建议 10GB 或以上
第一步:获取项目源码
首先,我们将项目源码克隆到本地。
bash
git clone https://github.com/index-tts/index-tts.git
cd index-tts
git lfs pull # 下载仓库中的大文件
提示 :如果
git克隆网络较慢,可以直接在GitHub页面下载ZIP压缩包,解压后使用。对于Windows用户,可以在本地操作后,使用xftp等工具将整个目录上传到Linux服务器。
第二步:配置Python环境与依赖
官方推荐使用 uv 工具管理Python环境和依赖,它能更快地处理依赖关系。
-
创建并激活Conda环境:
bash
conda create -n index-tts2 python=3.10 conda activate index-tts2 -
安装
uv并同步所有依赖:bash
# 安装uv包管理器 pip install -U uv -i https://mirrors.aliyun.com/pypi/simple # 使用uv根据项目配置文件安装所有依赖(包括可选依赖) uv sync --all-extras注意:如果上述命令安装缓慢或出错,可以指定国内镜像源加速:
bash
uv sync --all-extras --default-index "https://mirrors.aliyun.com/pypi/simple" # 或 uv sync --all-extras --default-index "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
第三步:下载预训练模型
我们使用 modelscope 来下载主要的TTS模型。
bash
# 安装 modelscope 命令行工具
uv tool install "modelscope"
# 如果安装慢,同样可换源
uv tool install "modelscope" --default-index "https://mirrors.aliyun.com/pypi/simple"
安装后可能会提示路径问题,按提示执行即可:
bash
export PATH="/root/.local/bin:$PATH"
接下来,下载核心的 IndexTTS-2 模型:
bash
# 下载模型到 checkpoints 目录
modelscope download --model IndexTeam/IndexTTS-2 --local_dir checkpoints
重要提示 :首次运行脚本时,程序还会自动下载一些必要的辅助模型(如来自 HuggingFace)。如果网络不畅,建议提前设置环境变量,显著提升下载成功率:
bash
export HF_ENDPOINT="https://hf-mirror.com"
第四步:运行你的第一段合成语音
确保你在项目根目录(例如/data4/index-tts/),然后通过以下命令运行推理脚本:
bash
# 将当前目录加入Python路径,然后运行脚本
PYTHONPATH="$PYTHONPATH:." uv run indextts/infer_test.py
infer_test.py对应的代码:
python
from indextts.infer_v2 import IndexTTS2
import os
import time
# 确保输出目录存在
output_dir = "outputs"
os.makedirs(output_dir, exist_ok=True)
# 初始化 TTS 模型
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints", use_fp16=False, use_cuda_kernel=False, use_deepspeed=False)
text = "您好,这里是丹宇码农,请问需要什么帮助吗?"
spk_audio_prompts = [
"audio_prompt/kanghui.wav",
"audio_prompt/haixia.wav"
]
# 遍历每个音频提示文件
for spk_audio_prompt in spk_audio_prompts:
try:
# 检查输入文件是否存在
if not os.path.exists(spk_audio_prompt):
print(f"警告: 文件 {spk_audio_prompt} 不存在,跳过")
continue
# 从路径中提取文件名(不带扩展名)
filename = os.path.splitext(os.path.basename(spk_audio_prompt))[0]
# 构建输出路径
output_filename = f"{filename}_output.wav"
output_path = os.path.join(output_dir, output_filename)
print(f"正在处理: {spk_audio_prompt} -> {output_path}")
# 记录开始时间
start_time = time.time()
# 生成语音
tts.infer(
spk_audio_prompt=spk_audio_prompt,
text=text,
output_path=output_path,
verbose=True
)
# 记录结束时间并计算耗时
end_time = time.time()
elapsed_time = end_time - start_time
print(f"✓ 已生成: {output_path}")
print(f" 耗时: {elapsed_time:.2f} 秒")
except Exception as e:
print(f"✗ 处理 {spk_audio_prompt} 时出错: {str(e)}")
print("所有音频生成完成!")
首次运行会较慢,因为它需要完成所有模型的加载和初始化。成功运行后,你就可以在自己的代码中调用了。
第五步:核心API使用详解
以下是几种最常用的语音合成场景,你可以根据需要选择。
1. 基础语音克隆
只需一段参考音频,即可克隆其音色并合成新内容。
python
from indextts.infer_v2 import IndexTTS2
# 初始化TTS引擎
tts = IndexTTS2(cfg_path="checkpoints/config.yaml",
model_dir="checkpoints",
use_fp16=False)
text = "Translate for me, what is a surprise!"
# 合成语音,保存为 gen.wav
tts.infer(spk_audio_prompt='examples/voice_01.wav',
text=text,
output_path="gen.wav",
verbose=True)
2. 情感控制合成
除了音色,还可以通过另一段"情感音频"来控制合成语音的情绪。
python
tts = IndexTTS2(cfg_path="checkpoints/config.yaml", model_dir="checkpoints")
text = "酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。"
# 使用 emo_audio_prompt 指定情感参考音频
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)来调节情感强度的强弱。
3. 通过向量精确控制情感
你可以直接指定一个8维情感向量来控制输出,顺序为:[高兴,愤怒,悲伤,害怕,厌恶,忧郁,惊讶,平静]。
python
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], # 惊讶强度为0.45
use_random=False,
verbose=True)
4. 使用文本引导情感
更直接的方式是让模型根据你输入的文本内容自动判断情感。
python
text = "快躲起来!是他要来了!他要来抓我们了!"
tts.infer(spk_audio_prompt='examples/voice_12.wav',
text=text,
output_path="gen.wav",
emo_alpha=0.6, # 情感强度系数,建议0.6左右更自然
use_emo_text=True, # 开启文本情感引导
use_random=False,
verbose=True)
总结与展望
至此,你已经完成了 Index-TTS2 的完整部署和基础使用。这个项目的强大之处在于它集成了音色克隆 与精细的情感控制,为语音合成应用(如有声书制作、视频配音、虚拟人交互)打开了更多可能性。
进阶提示:
- 项目还支持拼音混合输入来精确控制发音,适合处理多音字或特殊名词。
- 你可以尝试调整
use_random,use_fp16等参数,在速度、保真度和自然度之间找到最佳平衡。
本文首发于掘金(https://juejin.cn/post/7582424649784344576),如果在实践过程中遇到其他问题,欢迎在评论区留言讨论,也欢迎关注我,获取更多AI实战技术教程。