ChatTTS 中文文档 下载 App

ChatTTS 控制标签体系——oral、laugh、break、uv_break、lbreak 全解读

两种控制方式

ChatTTS 提供两套互补的韵律控制手段:

  1. 全局 prompt——通过 params_refine_text.prompt 给模型一个韵律偏好提示(例如"口语化 + 笑 + 停顿")
  2. 局部内联标签——直接在文本里插入标签,精确控制某句话、某个词的韵律

两套可以同时使用,但如果用了内联标签,通常配合 skip_refine_text=True 效果更可控。

全部标签列表

标签取值范围含义
[oral_0] ~ [oral_9]0 ~ 9口语化程度。0 = 完全书面,9 = 非常口语化(带语气词、停顿多)
[laugh_0] ~ [laugh_2]0 ~ 2笑声强度。0 = 不笑,2 = 明显笑
[break_0] ~ [break_7]0 ~ 7停顿等级。数字越大停顿越长
[uv_break]固定短停顿(约等于 break_3~4),常用于句中语气转换
[lbreak]固定长停顿(约等于 break_6~7),常用于句末或段落间

使用示例

内联标签(skip_refine_text=True)

text = '你好[uv_break]朋友们,听说今天是个好日子[laugh][lbreak]'
wavs = chat.infer(text, skip_refine_text=True)

全局 prompt

params_refine_text = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_4]',
)
wavs = chat.infer(text, params_refine_text=params_refine_text)

标签是怎么被处理的

ChatTTS 内部有一个"文本精炼"(Refine Text)模块,它会先对原始输入文本做一轮处理:

  1. 把控制标签替换成模型能理解的特殊 token
  2. 根据 prompt 中指定的风格,自动在合适的位置补充停顿、语气词
  3. 把精炼后的 token 序列送入解码器生成音频

如果 skip_refine_text=True,就跳过自动补充步骤,只保留你写的内联标签——适合完全手动控制的场景。

设计哲学

ChatTTS 的标签体系是故意做得"模糊"的:

这种设计让语音听起来更像真人说话,而不是机械复读。