随机说话人采样 sample_random_speaker() 用法
什么是说话人嵌入
ChatTTS 不做声音克隆——它的"多说话人"能力来自训练集中数百位说话人的嵌入向量。
每次调用 chat.sample_random_speaker() 会:
- 从说话人嵌入空间中随机采样一个向量
- 返回一个 JSON 字符串(可直接保存到文件)
- 每次调用返回不同值,对应不同音色
基本用法
chat = ChatTTS.Chat()
chat.load(compile=False)
# 采样一个随机说话人
rand_spk = chat.sample_random_speaker()
print(rand_spk[:50]) # 打印前 50 字符,类似 '{"embedding": [...], "emotion": ...}'
然后传给 infer:
wavs = chat.infer(
"你好,我是随机采样的说话人。",
params_infer_code=ChatTTS.Chat.InferCodeParams(spk_emb=rand_spk)
)
每次都不同
连续采样会得到完全不同的音色:
for i in range(5):
spk = chat.sample_random_speaker()
wavs = chat.infer(
"你好,我是不同的说话人。",
params_infer_code=ChatTTS.Chat.InferCodeParams(spk_emb=spk)
)
# 保存为不同文件,听差异
不传 spk_emb 时
如果不传 params_infer_code=... 或不传 spk_emb 参数,ChatTTS 会使用默认说话人嵌入——每次都是同一个音色(模型内置的)。
与声音克隆的区别
ChatTTS 的"多说话人"是采样训练集中已有的声音,不是让你上传一段录音来克隆。如果你想让模型模仿特定人的声音(例如你的声音),需要用 OpenVoice、so-vits-svc 等专门的声音克隆模型。
最佳实践
- 批量生成时:每次生成前先采样,确保所有语音有不同音色
- 需要固定音色时:采样一次后保存字符串,复用(见 说话人嵌入复用)
- 批量对比时:多个采样同时生成,对比选最好的音色