站点图标 高效码农

Qwen3-TTS全面解析:10语种的语音革命,如何实现低延迟与高保真?

随着人工智能技术的飞速发展,语音合成(TTS)技术已经从简单的机器朗读进化为能够理解上下文、模拟复杂情感并支持多语言实时交互的先进系统。在众多开源模型中,Qwen3-TTS 凭借其强大的端到端架构、极低的延迟表现以及卓越的语音还原能力,成为了开发者和研究人员的关注焦点。

本文将基于官方文档与技术报告,深入剖析 Qwen3-TTS 的技术细节、模型架构、多样化的应用场景以及详尽的性能评估数据,帮助您全面了解这款工具的潜力与应用方法。

核心概览与技术突破

Qwen3-TTS 是一款覆盖中文、英文、日语、韩语、德语、法语、俄语、葡萄牙语、西班牙语和意大利语等 10 种主要语言及其多种方言语音特征的文本转语音模型。它不仅仅是一个朗读工具,更是一个具备强大上下文理解能力的智能语音生成系统。它能够根据指令和文本语义自适应地控制语调、语速和情感表达,显著提升了对噪声文本的鲁棒性。

Qwen3-TTS Introduction

为了满足不同场景的需求,Qwen3-TTS 在技术层面实现了四个关键维度的突破:

1. 强大的语音表征能力

该模型搭载了自研的 Qwen3-TTS-Tokenizer-12Hz 分词器。这一组件不仅实现了高效的声学压缩,还完成了语音信号的高维语义建模。它能够完整保留副语言信息(如呼吸声、停顿)和声学环境特征,并通过轻量级的非 DiT(Diffusion Transformer)架构,实现了高速、高保真的语音重建。这意味着生成的声音不仅清晰,而且富有“人味”。

2. 通用端到端架构

Qwen3-TTS 采用了离散多码本大语言模型架构。这种架构实现了全信息的端到端语音建模,彻底避开了传统语言模型(LM)+ 扩散模型方案中常见的信息瓶颈和级联误差。这种设计不仅显著增强了模型的通用性,还提升了生成效率和性能上限,使得单一模型即可应对多种复杂的语音生成任务。

3. 极低延迟的流式生成

对于实时交互场景(如实时对话助手),延迟是至关重要的指标。Qwen3-TTS 基于创新的“双轨”混合流式生成架构,使得单个模型能够同时支持流式和非流式生成。在实际应用中,它可以在输入单个字符后立即输出首个音频包,端到端合成延迟低至 97ms。这一表现完全满足了实时交互场景的严苛要求。

4. 智能文本理解与语音控制

模型支持基于自然语言指令的语音生成。用户可以通过文本灵活控制音色、情感和韵律等多维声学属性。通过深度整合文本语义理解,模型能够自适应地调整语调、节奏和情感表达,真正实现了“所想即所得”的拟人化输出效果。

模型架构与版本选择

架构设计

Qwen3-TTS 的架构设计旨在平衡生成质量与推理效率。其核心在于结合了高维语义建模与轻量级声码器的优势,通过离散码本作为中间表示,让语言模型直接预测语音单元。这种设计使得模型在保持高音质的同时,极大降低了计算开销。

Qwen3-TTS Architecture

现有模型版本与下载指南

为了适应不同的开发需求,Qwen3-TTS 发布了多个不同规格的模型。以下是已发布模型的详细介绍,您可以根据具体应用场景选择最合适的版本。

Tokenizer

所有模型的语音编解码基础。

  • Qwen3-TTS-Tokenizer-12Hz: 负责将输入语音编码为码本,并将码本解码回语音。

主要生成模型对比表

模型名称 主要功能特性 语言支持 流式生成 指令控制
Qwen3-TTS-12Hz-1.7B-VoiceDesign 根据用户提供的描述进行声音设计(如音色、年龄、性格)。 中、英、日、韩、德、法、俄、葡、西、意 ✅ 支持 ✅ 支持
Qwen3-TTS-12Hz-1.7B-CustomVoice 通过用户指令控制目标音色;支持 9 种覆盖不同性别、年龄、语言和方言组合的高级音色。 中、英、日、韩、德、法、俄、葡、西、意 ✅ 支持 ✅ 支持
Qwen3-TTS-12Hz-1.7B-Base 基础模型,支持从用户音频输入进行 3 秒快速声音克隆;可用于微调其他模型。 中、英、日、韩、德、法、俄、葡、西、意 ✅ 支持
Qwen3-TTS-12Hz-0.6B-CustomVoice 支持 9 种高级音色,覆盖各种组合。体积较小。 中、英、日、韩、德、法、俄、葡、西、意 ✅ 支持
Qwen3-TTS-12Hz-0.6B-Base 基础模型,支持 3 秒快速声音克隆;可用于微调。体积较小。 中、英、日、韩、德、法、俄、葡、西、意 ✅ 支持

如何下载:
qwen-tts 包或 vLLM 中加载模型时,模型权重会自动下载。但如果运行环境不适合在执行时下载,可以使用以下命令手动下载。

通过 ModelScope 下载(推荐中国大陆用户):

pip install -U modelscope
modelscope download --model Qwen/Qwen3-TTS-Tokenizer-12Hz  --local_dir ./Qwen3-TTS-Tokenizer-12Hz
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local_dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./Qwen3-TTS-12Hz-1.7B-Base
modelscope download --model Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-0.6B-CustomVoice
modelscope download --model Qwen/Qwen3-TTS-12Hz-0.6B-Base --local_dir ./Qwen3-TTS-12Hz-0.6B-Base

通过 Hugging Face 下载:

pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-TTS-Tokenizer-12Hz --local_dir ./Qwen3-TTS-Tokenizer-12Hz
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local_dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./Qwen3-TTS-12Hz-1.7B-Base
huggingface-cli download Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-0.6B-CustomVoice
huggingface-cli download Qwen/Qwen3-TTS-12Hz-0.6B-Base --local_dir ./Qwen3-TTS-12Hz-0.6B-Base

快速上手:环境配置与使用指南

环境搭建

最快的使用方式是从 PyPI 安装 qwen-tts Python 包。为了避免依赖冲突,强烈建议在一个新的、隔离的环境中配置。

创建 Python 3.12 环境:

conda create -n qwen3-tts python=3.12 -y
conda activate qwen3-tts

安装核心包:

pip install -U qwen-tts

如果您打算本地开发或修改代码,可以从源码安装:

git clone https://github.com/QwenLM/Qwen3-TTS.git
cd Qwen3-TTS
pip install -e .

性能优化建议:
建议安装 FlashAttention 2 以减少显存占用并提升推理速度。

pip install -U flash-attn --no-build-isolation

注意:如果机器内存小于 96GB 且 CPU 核心较多,建议限制并发任务数:

MAX_JOBS=4 pip install -U flash-attn --no-build-isolation

FlashAttention 2 仅在模型加载为 torch.float16torch.bfloat16 时可用。

Python 包使用实战

1. 自定义语音生成

适用于 Qwen3-TTS-12Hz-1.7B/0.6B-CustomVoice 模型。您可以指定语言、说话人以及情感指令。

import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice",
    device_map="cuda:0",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

# 单条推理
wavs, sr = model.generate_custom_voice(
    text="其实我真的有发现,我是一个特别善于观察别人情绪的人。",
    language="Chinese", # 也可以设为 "Auto" 或省略以自适应;如果明确知道目标语言,建议显式设置。
    speaker="Vivian",
    instruct="用特别愤怒的语气说", # 如不需要,可省略。
)
sf.write("output_custom_voice.wav", wavs[0], sr)

支持的预设说话人列表:

说话人 声音描述 母语
Vivian 明亮、略带锋芒的年轻女性声音。 中文
Serena 温暖、温柔的年轻女性声音。 中文
Uncle_Fu 沉稳、低沉醇厚的资深男性声音。 中文
Dylan 清晰自然的年轻北京男性声音。 中文(北京方言)
Eric 活泼、略带沙哑明亮的成都男性声音。 中文(四川方言)
Ryan 节奏感强烈的动态男性声音。 英文
Aiden 阳光、中音清晰的美国男性声音。 英文
Ono_Anna 轻盈灵动的俏皮日本女性声音。 日语
Sohee 情感丰富的温暖韩国女性声音。 韩语

2. 声音设计

适用于 Qwen3-TTS-12Hz-1.7B-VoiceDesign 模型。您可以通过自然语言描述来创造声音,例如“萝莉女声”、“低沉男声”等。

import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
    device_map="cuda:0",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

wavs, sr = model.generate_voice_design(
    text="哥哥,你回来啦,人家等了你好久好久了,要抱抱!",
    language="Chinese",
    instruct="体现撒娇稚嫩的萝莉女声,音调偏高且起伏明显,营造出黏人、做作又刻意卖萌的听觉效果。",
)
sf.write("output_voice_design.wav", wavs[0], sr)

3. 声音克隆

适用于 Qwen3-TTS-12Hz-1.7B/0.6B-Base 模型。只需提供一个参考音频片段及其转录文本,即可克隆音色。

import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-Base",
    device_map="cuda:0",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

ref_audio = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-TTS-Repo/clone.wav"
ref_text  = "Okay. Yeah. I resent you. I love you. I respect you. But you know what? You blew it! And thanks to you."

wavs, sr = model.generate_voice_clone(
    text="I am solving the equation: x = [-b ± √(b²-4ac)] / 2a? Nobody can — it's a disaster (◍•͈⌔•͈◍), very sad!",
    language="English",
    ref_audio=ref_audio,
    ref_text=ref_text,
)
sf.write("output_voice_clone.wav", wavs[0], sr)

高级用法:复用提示特征
如果您需要多次使用同一个参考音色(避免重复计算特征),可以先构建提示。

prompt_items = model.create_voice_clone_prompt(
    ref_audio=ref_audio,
    ref_text=ref_text,
    x_vector_only_mode=False,
)
wavs, sr = model.generate_voice_clone(
    text=["Sentence A.", "Sentence B."],
    language=["English", "English"],
    voice_clone_prompt=prompt_items,
)

4. 声音设计后克隆

这是一个非常实用的组合工作流:

  1. 使用 VoiceDesign 模型合成一段符合目标角色的短参考音频。
  2. 将该音频输入 Base 模型的 create_voice_clone_prompt 构建可复用提示。
  3. 调用 generate_voice_clone 生成新内容,无需每次重新提取特征。这对于保持角色长文本一致性非常有用。
import torch
import soundfile as sf
from qwen_tts import Qwen3TTSModel

# 第一步:使用 VoiceDesign 模型创建参考音频
design_model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign",
    device_map="cuda:0",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

ref_text = "H-hey! You dropped your... uh... calculus notebook? I mean, I think it's yours? Maybe?"
ref_instruct = "Male, 17 years old, tenor range, gaining confidence - deeper breath support now, though vowels still tighten when nervous"
ref_wavs, sr = design_model.generate_voice_design(
    text=ref_text,
    language="English",
    instruct=ref_instruct
)
sf.write("voice_design_reference.wav", ref_wavs[0], sr)

# 第二步:使用 Base 模型构建克隆提示
clone_model = Qwen3TTSModel.from_pretrained(
    "Qwen/Qwen3-TTS-12Hz-1.7B-Base",
    device_map="cuda:0",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

voice_clone_prompt = clone_model.create_voice_clone_prompt(
    ref_audio=(ref_wavs[0], sr),   # 或者使用文件路径 "voice_design_reference.wav"
    ref_text=ref_text,
)

# 第三步:复用提示生成多条内容
sentences = [
    "No problem! I actually... kinda finished those already? If you want to compare answers or something...",
    "What? No! I mean yes but not like... I just think you're... your titration technique is really precise!",
]

wavs, sr = clone_model.generate_voice_clone(
    text=sentences,
    language=["English", "English"],
    voice_clone_prompt=voice_clone_prompt,
)
for i, w in enumerate(wavs):
    sf.write(f"clone_batch_{i}.wav", w, sr)

5. Tokenizer 编解码

如果仅需对音频进行编码和解码用于传输或训练,可以使用 Qwen3TTSTokenizer

import soundfile as sf
from qwen_tts import Qwen3TTSTokenizer

tokenizer = Qwen3TTSTokenizer.from_pretrained(
    "Qwen/Qwen3-TTS-Tokenizer-12Hz",
    device_map="cuda:0",
)

enc = tokenizer.encode("https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-TTS-Repo/tokenizer_demo_1.wav")
wavs, sr = tokenizer.decode(enc)
sf.write("decode_output.wav", wavs[0], sr)

本地 Web UI 演示部署

安装 qwen-tts 包后,可以直接运行 qwen-tts-demo 启动 Web 界面。

启动命令示例:

# CustomVoice 模型
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 0.0.0.0 --port 8000
# VoiceDesign 模型
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --ip 0.0.0.0 --port 8000
# Base 模型
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base --ip 0.0.0.0 --port 8000

之后在浏览器访问 http://<your-ip>:8000

Base 模型的 HTTPS 注意事项:
为了防止现代浏览器在远程访问时出现麦克风权限问题,Base 模型部署建议/必须运行在 HTTPS 服务下。可以使用 --ssl-certfile--ssl-keyfile 启用 HTTPS。

生成自签名证书(有效期 365 天):

openssl req -x509 -newkey rsa:2048 \
  -keyout key.pem -out cert.pem \
  -days 365 -nodes \
  -subj "/CN=localhost"

以 HTTPS 模式运行 Demo:

qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base \
  --ip 0.0.0.0 --port 8000 \
  --ssl-certfile cert.pem \
  --ssl-keyfile key.pem \
  --no-ssl-verify

然后访问 https://<your-ip>:8000

vLLM 集成与推理优化

vLLM 提供了对 Qwen3-TTS 的首日支持(Day-0 support),通过 vLLM-Omni 可以进行高效的部署和推理。目前支持离线推理,在线服务将在后续版本支持。

离线推理示例

首先克隆 vLLM-Omni 仓库并进入示例目录:

git clone https://github.com/vllm-project/vllm-omni.git
cd vllm-omni/examples/offline_inference/qwen3_tts

执行不同的任务:

# 单个样本 CustomVoice 任务
python end2end.py --query-type CustomVoice

# 批量样本 CustomVoice 任务
python end2end.py --query-type CustomVoice --use-batch-sample

# 单个样本 VoiceDesign 任务
python end2end.py --query-type VoiceDesign

# 批量样本 VoiceDesign 任务
python end2end.py --query-type VoiceDesign --use-batch-sample

# 单个样本 Base 任务(in-context learning 模式)
python end2end.py --query-type Base --mode-tag icl

深度性能评估

为了客观衡量 Qwen3-TTS 的性能,研究团队在多个基准测试集上进行了详尽的评估。所有推理均在 dtype=torch.bfloat16max_new_tokens=2048 设置下运行。

1. 语音生成基准

零样本语音生成 – Seed-TTS 测试集
衡量指标:词错误率(WER),越低越好。

模型 中文 WER 英文 WER
Seed-TTS (Anastassiou et al., 2024) 1.12 2.25
MaskGCT 2.27 2.62
E2 TTS 1.97 2.19
F5-TTS 1.56 1.83
Spark TTS 1.20 1.98
Llasa-8B 1.59 2.97
KALL-E 0.96 1.94
FireRedTTS 2 1.14 1.95
CosyVoice 3 0.71 1.45
MiniMax-Speech 0.83 1.65
Qwen3-TTS-25Hz-0.6B-Base 1.18 1.64
Qwen3-TTS-25Hz-1.7B-Base 1.10 1.49
Qwen3-TTS-12Hz-0.6B-Base 0.92 1.32
Qwen3-TTS-12Hz-1.7B-Base 0.77 1.24

分析: 在 Seed-TTS 测试集上,Qwen3-TTS-12Hz-1.7B-Base 在英文部分表现最佳,中文部分仅次于 CosyVoice 3,整体表现出极强的一致性和低错误率。

2. 多语言语音生成

TTS 多语言测试集
衡量指标:WER(内容一致性,越低越好)和余弦相似度(SIM,说话人相似度,越高越好)。

语言 Qwen3-TTS-12Hz-1.7B-Base WER Qwen3-TTS-12Hz-1.7B-Base SIM MiniMax WER ElevenLabs SIM
中文 0.777 0.799 2.252 0.677
英文 0.934 0.775 2.164 0.613
德语 1.235 0.775 1.906 0.614
意大利语 0.948 0.817 1.543 0.579
葡萄牙语 1.526 0.817 1.877 0.711
西班牙语 1.126 0.814 1.029 0.615
日语 3.823 0.788 3.519 0.738
韩语 1.755 0.799 1.747 0.700
法语 2.858 0.714 4.099 0.535
俄语 3.212 0.792 4.281 0.676

分析: Qwen3-TTS-12Hz-1.7B-Base 在大多数语言的 WER(内容准确性)和 SIM(说话人相似度)之间取得了极佳的平衡。特别是在中文、英语、意大利语、葡萄牙语和法语上,其综合性能优于对比模型 MiniMax 和 ElevenLabs。

3. 跨语言语音生成

Cross-Lingual 基准
衡量指标:混合错误率(英文为 WER,其他为 CER,越低越好)。

任务 Qwen3-TTS-12Hz-1.7B-Base CosyVoice3 CosyVoice2
英转中 4.77 5.09 13.5
日转中 3.43 3.05 48.1
韩转中 1.08 1.06 7.70
中转英 2.77 2.98 6.47
日转英 3.04 4.20 17.1
韩转英 3.09 4.19 11.2
中转日 8.40 7.08 13.1
英转日 7.21 6.80 14.9
韩转日 3.67 3.93 5.86
中转韩 4.82 14.4 24.8
英转韩 5.14 5.87 21.9
日转韩 5.59 7.92 21.5

分析: 在 12 项跨语言任务中,Qwen3-TTS-12Hz-1.7B-Base 在 9 项任务上取得了最佳成绩,显著优于 CosyVoice 系列模型,展现了强大的跨语言迁移能力。

4. 可控语音生成

InstructTTSEval 评估
衡量指标:属性感知与合成准确率(APS),描述-语音一致性(DSD),响应精度(RP)。

类型 模型 英文 APS 英文 DSD 英文 RP
Voice Design Qwen3TTS-12Hz-1.7B-VD 82.9 82.4 68.4
Voice Design Mimo-Audio-7B-Instruct 80.6 77.6 59.5
Voice Design Hume 83.0 75.3 54.3
Target Speaker Qwen3TTS-12Hz-1.7B-CustomVoice 77.3 77.1 63.7
Target Speaker Gemini-flash 92.3 93.8 80.1

分析: 在语音设计任务中,Qwen3-TTS 表现出色,各项指标均大幅领先于 Mimo 和 Hume 等模型。虽然 Gemini-flash 在目标说话人任务上表现优异,但作为一个通用大模型,Qwen3-TTS 作为一个专用 TTS 模型在可控性上的表现依然极具竞争力。

5. 语音分词器基准

语义语音分词器对比
衡量指标:PESQ (感知语音质量), STOI (短时客观可懂度), UTMOS (主观 MOS 预测), SIM (相似度)。

模型 PESQ_WB STOI UTMOS SIM
SpeechTokenizer 2.60 0.92 3.90 0.85
X-codec 2 2.43 0.92 4.13 0.82
Mimi 2.88 0.94 3.87 0.87
Qwen-TTS-Tokenizer-12Hz 3.21 0.96 4.16 0.95

分析: 自研的 Qwen-TTS-Tokenizer-12Hz 在所有关键指标上均大幅领先于业界主流分词器(如 Mimi, X-codec 2 等),这为 Qwen3-TTS 的高保真重建奠定了坚实基础。

DashScope API 使用

为了方便用户快速体验,Qwen3-TTS 也提供了 DashScope API 接口。

常见问题解答 (FAQ)

Q: Qwen3-TTS 支持哪些语言?
A: 目前支持中文、英语、日语、韩语、德语、法语、俄语、葡萄牙语、西班牙语和意大利语共 10 种主要语言,并包含多种方言音色。

Q: Base 模型和 CustomVoice 模型有什么区别?
A: Base 模型主要用于声音克隆,即输入一段参考音频来模仿其音色。CustomVoice 模型则内置了多种预设的高级音色(如 Vivian, Ryan 等),并支持通过指令改变情感和语调,更适合直接使用固定角色的场景。

Q: 声音设计和声音克隆哪个效果更好?
A: 这取决于具体需求。如果您有特定的目标音频样本,声音克隆能最大程度还原该音色。如果您想创造一个不存在的人物形象(如“年轻、活泼的美国女孩”),声音设计模型可以根据文本描述生成相应的声音,甚至可以结合两者,先用设计模型生成参考音频,再用克隆模型批量生成内容。

Q: 推理需要什么样的硬件配置?
A: 建议使用支持 CUDA 的 GPU。虽然文档未给出最低显存要求,但考虑到 1.7B 参数量及 FlashAttention 的使用,建议显存在 8GB 以上以获得流畅体验,使用 bfloat16 精度可以进一步节省显存。

Q: 如何实现流式生成?
A: Qwen3-TTS 的模型架构原生支持流式生成。在使用 vLLM 或 qwen-tts 包时,只需调用相关接口即可利用其 97ms 的低延迟特性输出音频流。

Q: 为什么 Web UI 部署 Base 模型需要 HTTPS?
A: 这是因为 Base 模型的 Web UI 需要调用浏览器的麦克风来录制参考音频。现代浏览器出于安全策略,通常只允许在 HTTPS(或 localhost)环境下访问麦克风。因此,远程访问必须配置 SSL 证书。

Q: 12Hz 和 25Hz 模型有何区别?
A: 12Hz 模型使用了更先进的 12Hz Tokenizer(Qwen-TTS-Tokenizer-12Hz),具有更高的压缩比和语义建模能力。从评估数据来看,12Hz 模型在音质(PESQ, STOI)和大多数 WER 指标上通常优于 25Hz 模型。

退出移动版