三行代码合成语音——ChatTTS 最短推理脚本
完整代码
import ChatTTS
chat = ChatTTS.Chat()
chat.load(compile=False)
wavs = chat.infer(["你好,欢迎使用 ChatTTS!"])
这三行做完了所有事:加载模型(含自动下载)→ 输入文本列表 → 返回音频波形。
infer() 的输入
infer() 接受以下参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| 第一个位置参数 | str 或 list[str] | 待合成的文本,单条字符串或字符串列表 |
params_refine_text | RefineTextParams | 文本精炼参数(控制韵律提示) |
params_infer_code | InferCodeParams | 推理代码参数(说话人、温度等) |
skip_refine_text | bool | 是否跳过文本精炼步骤 |
use_decoder | bool | 是否使用解码器路径(旧 API) |
infer() 的输出
返回值是 list[np.ndarray]——每个数组对应一条输入文本的音频波形:
- 采样率固定 24 kHz
- 数据类型为 float32
- 单声道(一维数组)
更完整的示例
import ChatTTS
import torch
import torchaudio
chat = ChatTTS.Chat()
chat.load(compile=False)
texts = [
"你好,欢迎使用 ChatTTS!",
"这是一段批量推理的测试文本。"
]
wavs = chat.infer(texts)
for i, wav in enumerate(wavs):
tensor = torch.from_numpy(wav).unsqueeze(0)
torchaudio.save(f"output_{i}.wav", tensor, 24000)
print(f"已保存 output_{i}.wav,时长约 {len(wav)/24000:.1f} 秒")
常见坑
- 中文编码:输入文本必须是 Python 字符串,不要传 bytes 对象
- 空文本:不要传空字符串,会报错或生成无效波形
- 单次输入不宜过长:模型对长文本的韵律把握会下降,建议分段处理