TTS 技术实践:让大模型开口说话,从 AI 语音播报到音色复刻
摘要: 如果说 ASR 是让 AI 听懂人类语言,那么 TTS(Text-to-Speech)就是让 AI 开口说话。近年来,TTS 已经从传统的机械式语音合成,发展到结合语言模型、神经音频编解码和情绪控制的生成式语音技术。本文以开源 Qwen3-TTS 为例,介绍现代 TTS 的核心原理,并通过 AI 资讯语音播报、少样本音色复刻两个 Python 实践案例,展示如何让 AI 生成自然、可控且具有个性化音色的语音。
一、TTS 是什么?为什么现在的 AI 说话越来越自然?
我们平时使用的导航语音、智能音箱、听书软件,其实都离不开 TTS。
它的核心任务很简单:
把一段文字转换成可以播放的语音。
例如,输入:
今天的人工智能行业有三个值得关注的新进展。
模型输出一段 WAV 或 MP3 音频。
听起来似乎没什么技术含量。毕竟,很多年前的手机就已经能朗读文字了。
但如果仔细听过传统语音合成,就会发现一个问题:它虽然能把每个字读对,但听起来经常像机器人。
真正困难的不是“发出声音”,而是让模型知道:
- 哪里应该停顿?
- 哪些词需要强调?
- 什么时候应该表现出疑问、兴奋或遗憾?
- 如何在整段话里维持一致的音色和自然的语速?
这也是新一代 TTS 模型重点解决的问题。
1.1 大模型时代的 TTS 如何工作?
早期 TTS 系统通常需要文本分析、发音预测、声学建模和声码器等模块。
现代生成式 TTS 则越来越多地采用语言模型与神经音频编解码器相结合的架构。
以 Qwen3-TTS 为例,可以简化为:
输入文字
│
▼
文本编码与语义理解
│
▼
语言模型
│
▼
生成离散语音 Token
│
▼
神经音频解码器
│
▼
语音波形 WAV
这里最值得关注的是 Speech Token(语音 Token)。
大语言模型通过预测文本 Token 来生成句子,而 Qwen3-TTS 通过建模离散语音表示来生成声音。
Qwen3-TTS 使用专门的 Tokenizer-12Hz,将语音压缩为离散编码,再由音频解码器还原成波形。
这里的 12Hz 是语音 Token 的时间编码频率,并不是最终 WAV 音频的采样率。
这种方式让模型能够在生成语音内容的同时,学习音色、节奏、停顿等声学特征。
当然,不是所有 TTS 都使用自回归语言模型。F5-TTS 等模型还采用了 Flow Matching 等不同技术路线。
二、值得关注的 TTS 模型
目前比较有代表性的开源 TTS 项目包括:
| 模型 | 主要特点 | 适用场景 |
|---|---|---|
| Qwen3-TTS-0.6B | 轻量版本,提供预置音色及音色复刻能力 | 语音播报、本地应用 |
| Qwen3-TTS-1.7B | 提供音色设计、音色复刻等不同版本 | 个性化配音 |
| CosyVoice 3 | 约 0.5B,支持多语言、零样本语音生成 | 语音助手、实时交互 |
| F5-TTS | 基于 Flow Matching,支持参考语音生成 | 配音、声音复刻研究 |
本文选择 2026 年 1 月开源的 Qwen3-TTS 系列。
它支持中文、英文、日文、韩文等 10 种主要语言,提供了三种比较有意思的能力:
| 模型类型 | 能力 |
|---|---|
| CustomVoice | 选择预置音色,通过指令控制语气 |
| VoiceDesign | 根据自然语言描述设计声音 |
| Base | 根据参考录音复刻说话人的音色 |
例如,我们可以要求模型使用成熟男声、温柔女声,或者以兴奋、严肃的语气朗读一段文字。
也可以提供一段自己的录音,让模型尝试用相似音色朗读新的内容。
官方项目:
下面通过两个实际案例看看怎么使用。
三、实践案例一:为 AI 资讯简报自动生成语音
3.1 业务场景
假设我们已经开发了一个每天自动生成 AI 资讯简报的系统。
以前用户只能阅读:
今天人工智能领域有三个值得关注的新进展。首先,一家科技公司发布了新的开源大模型……
现在希望增加一个功能:把文字简报自动转成自然语音,让用户可以像听播客一样收听。
这里有两个需求:
- 音色保持一致,听起来像同一个主播。
- 播报语气自然,不能像逐字念稿。
Qwen3-TTS 的 CustomVoice 模型比较适合这个场景。
3.2 环境准备
建议使用 Python 3.12,并配置兼容的 NVIDIA GPU、CUDA 与 PyTorch 环境。
安装依赖:
pip install -U qwen-tts soundfile
首次使用时,程序会自动下载模型文件。下面采用 0.6B 版本,降低实验成本。
3.3 Python 完整实现
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
# 1. 加载TTS模型
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice",
device_map="cuda:0",
dtype=torch.bfloat16,
attn_implementation="sdpa"
)
# 2. 待播报的资讯
text = """
今天的人工智能资讯,主要有三个看点。
首先,开源大模型正在持续降低部署成本。
其次,越来越多的企业开始把人工智能
应用到真实的业务流程中。
最后,多模态技术正在让人机交互变得更加自然。
"""
# 3. 生成语音
wavs, sr = model.generate_custom_voice(
text=text,
language="Chinese",
speaker="Vivian",
instruct=(
"像专业新闻主播一样播报,"
"语速中等,语气自然平稳,"
"重点内容适当强调。"
)
)
# 4. 保存音频
sf.write(
"ai_news.wav",
wavs[0],
sr
)
print("语音生成完成:ai_news.wav")
运行后会得到一个 ai_news.wav 文件,可以直接播放。
代码中的 Vivian 是模型内置的中文女性音色。
还可以改成:
Serena:温柔、柔和的女性音色。Uncle_Fu:低沉、成熟的男性音色。Dylan:带有北京话特色的年轻男声音色。
这些都是官方模型支持的预置说话人。
3.4 如果想控制情绪呢?
只需要修改 instruct。
例如:
# 严肃新闻播报
instruct = "语速平稳,语气严肃,像专业财经新闻主播。"
# 轻松播客风格
instruct = "语气轻松自然,像朋友聊天一样,适当停顿。"
# 兴奋的产品发布介绍
instruct = "语气兴奋、有感染力,重点词语明显强调。"
但要注意,instruct 是自然语言控制指令,并不是能够精确控制音高、停顿秒数的参数。
模型未必每次都完全按照要求生成。
如果需要对长篇语音进行精细控制,可以先对文字进行分段,再分别生成并拼接音频。
到这里,一个最基础的 AI 语音资讯播报系统就完成了:
新闻数据
│
▼
LLM 生成资讯摘要
│
▼
文本清洗与分段
│
▼
Qwen3-TTS
│
▼
生成语音
│
▼
音频文件 / 播客
实际业务中,文章生成和 TTS 也可以完全独立,避免重新生成文章时重复调用语音模型。
四、实践案例二:只提供几秒录音,复刻自己的声音
4.1 业务场景
第二个案例更有意思。
假设我们想制作一个个人知识分享栏目,但不希望每次都拿着麦克风重新录音。
理想的工作方式是:
- 先录制一小段自己的声音。
- 让模型提取音色特征。
- 输入新的文章内容。
- 使用与自己相似的音色生成语音。
这就是 Voice Cloning(音色复刻)。
Qwen3-TTS 的 Base 模型支持从约 3 秒的参考音频进行快速音色复刻。
不过,3 秒只是模型的最低能力示例之一,不代表所有音频都能获得理想效果。
实际使用中,清晰、安静且发音自然的参考录音通常更有帮助。
4.2 准备参考录音
首先用自己的声音录制一段 reference.wav。
例如:
大家好,这是我为语音合成模型录制的一段参考声音,希望它能准确还原我的音色。
然后准备要生成的新文本:
今天我们来聊一聊,为什么越来越多的人工智能应用开始使用语音交互。
整个流程如下:
自己的参考录音
│
▼
提取音色特征
│
│ 新的文本
│ │
└────┬─────┘
▼
Qwen3-TTS Base
│
▼
生成相似音色语音
4.3 Python 实现
注意,音色复刻需要加载 Base 模型,而不是前面使用的 CustomVoice 模型。
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel
# 1. 加载音色复刻模型
model = Qwen3TTSModel.from_pretrained(
"Qwen/Qwen3-TTS-12Hz-0.6B-Base",
device_map="cuda:0",
dtype=torch.bfloat16,
attn_implementation="sdpa"
)
# 2. 参考录音
ref_audio = "reference.wav"
# 必须与参考录音真实内容对应
ref_text = (
"大家好,这是我为语音合成模型"
"录制的一段参考声音,"
"希望它能准确还原我的音色。"
)
# 3. 要生成的新内容
new_text = (
"今天我们来聊一聊,"
"为什么越来越多的人工智能应用"
"开始使用语音交互。"
)
# 4. 执行音色复刻
wavs, sr = model.generate_voice_clone(
text=new_text,
language="Chinese",
ref_audio=ref_audio,
ref_text=ref_text
)
# 5. 保存结果
sf.write(
"my_voice.wav",
wavs[0],
sr
)
print("音色复刻完成")
最终生成 my_voice.wav。
这个文件里的内容与参考录音完全不同,但模型会尽量保留原始说话人的音色特征。
如果要批量生成很多段文章,可以使用官方提供的 create_voice_clone_prompt(),提前计算参考音频特征,避免每次都重复处理。
4.4 音色相似,不代表完全一样
这里需要区分两个概念:
音色相似度:听起来是否像同一个人。
韵律与情绪一致性:说话的停顿、语速、重音和情绪是否自然。
模型可能成功复刻一个人的基本音色,但无法完整还原其特有的口头习惯和表达方式。
另外,音色复刻应当使用本人录音或已经获得明确授权的声音。生成内容也应清晰标注为 AI 合成,避免被误认为真实录音。
五、TTS 落地时,最容易踩哪些坑?
5.1 数字、缩写和专业术语的读法
这是很多 TTS 项目容易忽略的问题。
例如:
订单金额:¥1,250.50
模型名称:Qwen3-TTS
增长率:12.8%
模型不一定会按照业务预期朗读。
尤其是金融、医疗、科技领域,大量数字与英文缩写会增加错误概率。
因此,正式调用 TTS 之前,建议增加 Text Normalization(文本规范化)。
例如:
原始:
增长率为12.8%。
规范化:
增长率为百分之十二点八。
但也不能把所有数字都机械地转换成中文。
订单编号、电话号码、金额、小数和年份的读法并不相同,需要根据业务字段类型分别处理。
5.2 实时生成和离线生成不是一回事
假设要制作一小时的有声书,离线生成完全可以接受。
但如果开发语音助手:
用户说完话,AI 两秒后才开始说话。
这样的交互体验可能就不太理想。
实时 TTS 应重点关注:
- 首包音频延迟(Time to First Audio)。
- 实时率(Real-Time Factor,RTF)。
- 连续音频输出是否流畅。
- 并发请求下的延迟和显存占用。
其中:
[
RTF=\frac{\text{生成耗时}}{\text{生成音频时长}}
]
假设生成 10 秒音频需要 2 秒,那么:
[
RTF=0.2
]
RTF 小于 1,表示整体生成速度快于音频播放速度。
但离线 RTF 很低,并不代表首包延迟一定很小。
本文的 Python 示例采用完整音频生成方式,并不是流式播放实现。实时系统需要使用模型的流式推理接口和相应服务框架。
5.3 如何评价 TTS 模型效果?
TTS 的评价比文本生成更加主观。
可以重点关注:
| 指标 | 主要作用 |
|---|---|
| MOS | 人类对语音自然度的主观评分 |
| WER / CER | 将生成语音重新识别后,衡量内容错误率 |
| Speaker Similarity | 音色复刻与参考音频的相似程度 |
| RTF | 音频生成速度 |
| 首包延迟 | 实时语音交互响应速度 |
其中,使用 ASR 重新识别生成音频是一种很实用的自动化测试方式:
输入文本
│
▼
TTS 生成语音
│
▼
ASR 重新识别
│
▼
与原文本比较
│
▼
计算 CER / WER
这样可以发现漏读、重复朗读和读错文字等问题。
当然,最终误差会同时受到 TTS 和 ASR 的影响,不能把全部错误都归因于 TTS。
六、总结:TTS 在 AI 系统中扮演什么角色?
前面我们研究过 ASR、OCR、Embeddings 和 Reranker。
TTS 与它们最大的不同在于:它不是把现实世界的信息转换成机器可理解的数据,而是把 AI 处理后的内容重新转换成人类可以直接听到的声音。
例如,一个完整的智能语音客服系统:
用户说话
│
▼
ASR 语音识别
│
▼
用户文本
│
▼
Embeddings 检索
│
▼
Reranker 精排
│
▼
LLM 生成回复
│
▼
TTS 语音合成
│
▼
播放给用户
本文介绍了两种典型应用:
- AI 语音播报: 使用预置音色和自然语言指令,为新闻、知识内容生成有表现力的语音。
- 个人音色复刻: 使用少量参考录音,让模型以相似音色朗读新的文本。
实际上,TTS 的用途还包括有声书、视频配音、无障碍阅读和数字人语音生成等。
随着生成式语音模型的发展,TTS 正在从“把字念出来”,变成“根据内容和表达要求自然地说出来”。
不过,声音越逼真,越需要关注内容准确性和音色使用授权。 好的 TTS 不只是像真人说话,更应该把原本的文字准确、自然地传达出来。
最后,如果说 ASR 是 AI 的耳朵,那么 TTS 就是 AI 的嘴巴。
前者决定 AI 能不能听清人说的话,后者决定 AI 能不能把自己的回答说清楚。
而当 ASR、LLM 和 TTS 连接起来,AI 才真正具备了与人自然进行双向语音交流的基本能力。
- 点赞
- 收藏
- 关注作者
评论(0)