TTS 技术实践:让大模型开口说话,从 AI 语音播报到音色复刻

举报
yd_54922183 发表于 2026/10/25 21:48:43 2026/10/25
【摘要】 本文以开源 Qwen3-TTS 为例,介绍现代 TTS 的核心原理,并通过 AI 资讯语音播报、少样本音色复刻两个 Python 实践案例,展示如何让 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 资讯简报的系统。

以前用户只能阅读:

今天人工智能领域有三个值得关注的新进展。首先,一家科技公司发布了新的开源大模型……

现在希望增加一个功能:把文字简报自动转成自然语音,让用户可以像听播客一样收听。

这里有两个需求:

  1. 音色保持一致,听起来像同一个主播。
  2. 播报语气自然,不能像逐字念稿。

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 业务场景

第二个案例更有意思。

假设我们想制作一个个人知识分享栏目,但不希望每次都拿着麦克风重新录音。

理想的工作方式是:

  1. 先录制一小段自己的声音。
  2. 让模型提取音色特征。
  3. 输入新的文章内容。
  4. 使用与自己相似的音色生成语音。

这就是 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 才真正具备了与人自然进行双向语音交流的基本能力。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。