ChatTTS 是一个为对话场景设计的语音合成模型,特别适用于大语言模型助手等应用,支持英语和中文两种语言,使用了超过10万小时的中文和英文数据进行训练。
对话式语音合成
ChatTTT 针对基于对话的任务进行了优化,能够生成自然且富有表现力的语音,支持多说话人功能,方便进行交互式对话。
精细控制
ChatTTT 模型可以预测和控制精细的语音韵律特征,包括笑声、停顿和感叹词等。
更好的韵律表现
ChatTTS 在韵律表现上超越了大多数开源TTS模型。
基本用法
from ChatTTS import Chat
from IPython.display import Audio
chat = Chat()
chat.load_models()
texts = ["<在这里输入您的文本>"]
wavs = chat.infer(texts, use_decoder=True)
Audio(wavs[0], rate=24_000, autoplay=True)
高级用法
从高斯分布中采样说话人
import torch
std, mean = torch.load('ChatTTS/asset/spk_stat.pt').chunk(2)
rand_spk = torch.randn(768) * std + mean
params_infer_code = {
'spk_emb': rand_spk, # 添加采样的说话人嵌入
'temperature': .3, # 使用自定义温度
'top_P': 0.7, # top P 解码
'top_K': 20 # top K 解码
}
句子级别的手动控制
params_refine_text = {
'prompt': '[oral_2][laugh_0][break_6]' # 在文本中添加特殊标记
}
wav = chat.infer("<在这里输入您的文本>", params_refine_text=params_refine_text, params_infer_code=params_infer_code)
单词级别的手动控制
text = 'What is [uv_break]your favorite english food?[laugh][lbreak]'
wav = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code)
示例:自我介绍
inputs_en = """chat T T S is a text to speech model designed for dialogue applications.
[it supports mixed language input
and offers multi speaker capabilities with precise control over prosodic elements
[laugh]like like
laughter[laugh],
[uv_break]pauses,
[uv_break]and intonation.
[it delivers natural and expressive speech,
so please
use the project responsibly at your own risk.]""" .replace(' \n ', '')
params_refine_text = {
'prompt': '[oral_2][laugh_0][break_4]'
}
audio_array_cn = chat.infer(inputs_cn, params_refine_text=params_refine_text)
audio_array_en = chat.infer(inputs_en, params_refine_text=params_refine_text)
硬件要求和推理速度
对于30秒的音频片段,至少需要4GB的GPU内存。在4090D GPU上,可以每秒生成约7个语义标记。实时因子(RTF)约为0.65。模型稳定性尚不理想,可能会出现多说话人或音频质量不佳的问题。这是自回归模型(如bark和valle)常见的问题,通常难以完全避免。可以尝试多次采样以找到合适的结果。
控制选项
目前发布的模型中仅支持[laugh]、[uv_break]和[lbreak]等标记级控制单元,未来版本可能会开源具有更多情感控制能力的模型。