cv.cm

AI · AI音频

文字转语音(TTS)的原理是什么?神经TTS又是什么?

阅读约 8 分钟

简短回答

文字转语音(TTS)分三个阶段把文字变成音频:先规范化文本(数字、日期、缩写),再转换成发音,最后生成波形。神经TTS用录音训练出的网络来获得自然的节奏和语气。浏览器通过 Web Speech API 提供的声音来自设备或其厂商,所以手机和电脑上听起来不一样。

打开文字转语音

TTS 系统的三个阶段

  1. 文本规范化。系统把文字改写成可以朗读的词。“Dr. Lee paid $25 on 3/4”要变成类似“Doctor Lee paid twenty-five dollars on March fourth”(或“the third of April”,取决于地区)的形式。很多读错的情况出在这里,而不是声音本身。中文里同样如此,“2026/3/4”“¥25”“第 3 章”都需要先转成口语读法。
  2. 语言学分析。把词转换成音素(一种语言的发音单位),并预测重音、断句和语调。拼写相同但读法不同的词,例如英语里现在时和过去时的“read”,或者有多个读音的汉字(多音字),都需要结合上下文判断。
  3. 波形生成。把发音及其时间安排变成音频采样。早期系统把录好的片段拼接起来(拼接合成),或使用共振峰模型,听起来像机器人。神经系统则用网络来预测音频。

经典的神经网络设计 Tacotron 2 清楚地展示了现代的分工:一个网络把文本映射成梅尔频谱图(语音的时间-频率图像),第二个网络,即声码器(vocoder),再把这张图变成波形。在作者的听感测试中,它的得分接近专业录音。较新的系统常常把这些阶段合并,或者用类似语言模型的网络生成压缩的音频 token,因此只需一小段样本就能复制说话人的声音。

神经TTS与浏览器自带的系统语音

网页可以通过 Web Speech API 朗读,自己不需要任何模型。speechSynthesis 对象使用平台提供的某个声音,朗读一个 SpeechSynthesisUtterance。

浏览器系统语音(Web Speech API)神经TTS服务或模型
声音来源操作系统或浏览器厂商;有的在本地,有的在远端你运行的模型,或你调用的云端 API
可选声音取决于已安装的内容;Windows、macOS、Android、iOS 各不相同固定的声音目录、自定义声音,有时可克隆
音质从机器人腔到相当自然,取决于设备通常自然,节奏和情感更好
成本与配置免费,无需密钥,本地声音可离线使用需要 API 密钥并按字符计费,或下载大模型
获取音频文件API 不支持;只会通过扬声器播放通常返回 MP3、WAV 等格式
克隆声音不支持部分服务支持,并带有授权校验

每个声音都带有 localService 标志。规范规定:本地合成器为 true,远程服务为 false;远程声音可能需要网络,并会增加延迟。

const u = new SpeechSynthesisUtterance("Your order has shipped.");
u.lang = "en-GB";
u.rate = 0.9;   // 1 is normal; spec allows 0.1 to 10
u.pitch = 1.0;  // 0 to 2, 1 is the voice default
u.volume = 1.0; // 0 to 1
const voices = speechSynthesis.getVoices();
u.voice = voices.find(v => v.lang === "en-GB") || null;
speechSynthesis.speak(u);

声音列表常常在页面启动之后才加载,所以 getVoices() 一开始可能返回空列表;请监听 voiceschanged 事件。例如 cv.cm 的文字转语音工具用的就是这些内置声音,并提供语速和音高控制。它适合快速试听草稿,而不是神经语音生成器,可选的声音取决于你的设备。

SSML:控制停顿和读音

语音合成标记语言(SSML)是 W3C 标准,是一种告诉 TTS 引擎如何朗读文字的 XML。大多数云端 TTS 服务都接受它。Web Speech 规范允许在 utterance 中使用 SSML,但不支持某些标签的引擎必须把标签去掉、朗读剩下的文字,所以各浏览器的支持并不一致。

<speak>
  Your code is <say-as interpret-as="characters">A7K</say-as>.
  <break time="500ms"/>
  Please call <sub alias="World Health Organization">WHO</sub>
  before <prosody rate="90%" pitch="+2st">Friday at noon</prosody>.
  The word is <phoneme alphabet="ipa" ph="təˈmɑːtoʊ">tomato</phoneme>,
  and it is <emphasis level="strong">not</emphasis> optional.
</speak>
元素作用示例值
break插入停顿time 250ms 或 2s;strength 从 weak 到 x-strong
prosody调整语速、音高、音量rate 90% 或 slow;pitch +2st 或 high;volume +6dB 或 soft
emphasis强调某个词level 为 strong、moderate、reduced
say-as按字母、日期、数字来读interpret-as 的取值取决于引擎
sub读别名而不是书面文字WHO 读作 World Health Organization
phoneme给出精确读音alphabet 为 ipa;支持是可选的
voice, lang在文本中途切换声音或语言英文句子中引用的外文标题

如果某个服务忽略 SSML,你仍然可以用纯文字来引导:用逗号和句号控制停顿,把数字拼写成文字,对难读的名字用拼音或音标式写法替代。

写出念起来好听的文字

  • 用短句。长句会让声音找不到自然的换气点。
  • 数字要按希望的读法来写,比如“二零二六年”还是“两千零二十六年”。
  • 展开听众需要听到的缩写和单位:“km/h”可能被逐字母读出来。
  • 设对语言和地区。用 en-US 的声音读西班牙语人名,或用 zh-CN 的声音读英文,会用错发音体系。
  • 发布前把结果完整听一遍。检查人名、数字和有两种读法的词。

声音克隆:授权与法律

现代模型可以凭一小段录音模仿一个人的声音。这对给自己的视频配音,或者让失声的人重新发声很有用,同样也被用来诈骗,比如冒充亲属或公司负责人的电话。任何一个人的声音,都应当视为属于说话人的个人信息。

地区规则要点(概述)状态
中国对人脸、人声等生物识别信息进行编辑的服务,应当提示使用者依法告知被编辑的个人并取得其单独同意(《互联网信息服务深度合成管理规定》第十四条)。可能导致公众混淆或误认的拟真人声合成、人声模仿等,应当作显著标识(第十七条)。2025 年的标识办法增加了显式标识和元数据标识,并禁止删除。自 2023-01-10 起施行;标识办法自 2025-09-01 起施行
欧盟《人工智能法》第 50 条:提供者必须以机器可读的方式标记合成音频,发布深度伪造音频或视频的人必须披露其为人工生成。个人数据规则同样适用于语音录音。根据第 113 条,自 2026 年 8 月 2 日起适用;请留意后续修订
美国截至撰写时没有统一的全国性声音克隆法。保护来自各州的肖像权/公开权与隐私法,以及现有的欺诈和消费者保护规则。各州不同

正规的克隆服务会在创建声音之前,要求说话人录制一段同意声明。如果某个工具允许你用任意片段克隆任何人的声音,且没有这类校验,凡是要发布的内容就不要使用它。

常见问题

为什么同一个网页在手机和笔记本上听起来不一样?

Web Speech API 使用的是每台设备上安装的或其厂商提供的声音。Windows、macOS、Android 和 iOS 自带的声音不同,所以同样的代码会产生不同的音频。

能从 Web Speech API 下载 MP3 吗?

不能直接下载。该 API 只通过扬声器播放语音,不返回音频数据。要得到文件,需要使用能输出音频的 TTS 服务或模型,或者用屏幕/音频录制工具。

克隆名人的声音合法吗?

在大多数地方,未经许可把有辨识度的人的声音用于广告、产品,或可能误导听众的内容,会在肖像权/公开权、隐私、消费者保护或深度合成规定下带来法律风险。请获得许可,并标注结果。

TTS 和声音转换有什么区别?

TTS 是由文字生成语音。声音转换则是拿一个人说话的录音,把它改成另一个人的声音,同时保留原来的节奏和情感。

TTS 为什么会读错名字?

模型根据拼写和训练数据猜测读音。生僻名字、外来词和多音字常常猜错。可以使用 SSML 的 phoneme 或 sub 标签,或者把名字改写成按读音拼写的形式。

全部AI教程