AI 生成任务

文字转语音(TTS)模型是怎么发出声音的

又称 语音合成, TTS, tts model, 神经语音合成

文字转语音把书面文字变成语音。现代 TTS 模型分两步完成:先从文本预测一个声学表示,再把这个表示变成波形。这也解释了为什么同一句话可以换不同音色、不同情绪强度念出来。

模型实际在预测什么

把一句话念出来,需要的信息远多于这句话本身包含的。重音落在哪、每个元音多长、句尾音高是升还是降、说话人在哪儿换气 —— 这些都没有写在字面上,而 TTS 模型真正的活就是把它们补出来。

标准架构把这件活分成两半。声学阶段接收规范化后的文本(通常先转成音素),预测出一张频谱:一张时间-频率的图,里面编码了音高曲线、时长和音色,但它还不是声音。声码器阶段再从这张图合成波形。这个划分在实践中有用,因为两个阶段的失效方式完全不同:声学失效听起来是重音不对、节奏怪、念得平;声码器失效听起来是嗡鸣、金属音、辅音糊成一片。

说话人身份是作为另一路条件信号进来的,这就是为什么一个模型能装很多音色,也是为什么换音色不需要重写文本。

真正有用的那些参数

多数系统会暴露下面这些里的一部分,它们的分量并不相等。

  • 音色选择。 单一影响最大的因素。每个音色自带音高范围、口音和默认能量,没有任何参数能让一个平静的旁白音色可信地喊起来。
  • 速度。 通常是干净的倍率。小幅改动读起来是自然,大幅改动读起来是磁带变速。
  • 情绪 / 风格。 有提供的话是个强杠杆,但它是全局的:它给整次请求定一个情绪,而不是句子里的某一拍。
  • 稳定度 / 波动。 稳定度高,结果可复现但更平;稳定度低,表现力更强,但拿到一条奇怪录音的风险也更大。
  • 语言 / 口音提示。 中英混排的稿子里很重要,否则模型会把一种语言的音系套到另一种语言的词上。

最被低估的控制项是稿子本身。标点就是时间指令:逗号是一个短拍,句号是更长的一拍,段落间隔更长。把一句话改短,对念法的改变比拨速度滑块更可靠。

怎么写「适合被念出来」的文本

文本规范化站在整条流水线的最前面,也是大部分丢人错误的发源地。它必须判断 Dr. 是 doctor 还是 drive、1420 是「十四二十」还是「一千四百二十」、read 是现在时还是过去时。它靠上下文猜,而且经常猜错。

几条实用规则:在意的地方就写出来,比如把 1420 写成 fourteen twenty;生僻名字按读音改写;长句在真人会换气的地方断开;避免括号,多数系统要么忽略它、要么把它读成一次磕巴。缩写也要检查,因为模型可能逐字母拼读,也可能试着当一个词读,而你没法预测是哪种。

任何长于一段的内容,都逐句合成再用刻意设计的静音拼起来。这多出一步工,换来三样东西:语调一致、能只重摇某一条坏掉的句子而不用重生成整段、以及对停顿长度的精确控制 —— 而后者才是让旁白听起来像「剪过」而不是「背出来」的关键。

它和其他几个音频任务的关系

从文字合成语音只是四个相关任务之一,选对了能省掉大量试错。文字转语音从稿子和一个选定音色出发;声音克隆从稿子加某个特定人的参考音频出发;变声器从一段已经录好的表演出发、只替换音色,当「演」比「词」更重要时它才是对的工具;口型同步从已完成的音频加一段视频出发,把嘴对上。

流程怎么选,取决于你手里已经有什么。表演已经存在,就保住它去做转换;只有文字,就去合成,并且预期你的大部分精力会花在标点和分句上,而不是参数上。

支持该效果的模型

取自 ZOOOP 实时模型目录,新模型上架后自动出现在这里。

这个效果的提示词

一条能稳定出效果的起点。主体和场景可以换,技术性的那几句留着。

She said the address was 1420 Elm, not 1402. Are you certain? Because we have exactly one hour before the gallery closes, and I am not doing this twice.

试一下:文字转语音

打开生成器,参数已经预填好。

常见问题

TTS 模型内部的两个阶段分别是什么?
先由声学模型读入规范化后的文本,预测一个中间表示(通常是梅尔频谱),里面编码了音高、时长和音色;再由声码器把这个频谱变成真正的波形。老一代系统把这两步拆成两个模型,现在有些是端到端一起训的。
什么是 zero-shot 语音合成?
用模型从未训练过的音色说话,做法是在推理时拿几秒参考音频做条件,而不是去微调。它是「即时声音克隆」得以成立的原因。质量高度依赖参考音频干净、无混响、且不带背景音乐。
为什么人名和数字会念错?
因为文本规范化在合成之前先跑,而它只能猜。1420 可能是年份、门牌号或者数量,Sean 也可能是好几个名字之一。可靠的解法是「把你想听到的写出来」:数字写成汉字或英文单词,生僻名字按读音改写。
情绪和节奏怎么控制?
三个杠杆,按效果排序。挑哪个音色决定了基准区间;模型如果暴露了情绪和速度参数,它们能整体改变念法;标点和句子长度则在局部塑形,而在你想要一个停顿的地方放一个句号,几乎胜过任何参数。
为什么长文本会漂或者越念越赶?
语调是在一个有限窗口内预测的,很长的段落会记不住重音已经用在哪儿了。把稿子拆成句子或短段、逐条合成、再用真实停顿拼起来,念法比一次长请求稳定得多。
语音合成和声音克隆有什么区别?
语音合成是「用任意音色把文字变成语音」这个一般任务;声音克隆是「贴合某个特定人的声音」这个更窄的问题,它多出一个参考音频环节,也多出一整套通用合成不会遇到的授权问题。

相关术语