最近,语音合成(TTS)领域的技术竞争异常激烈,而阿里通义最新推出的Qwen3-TTS两大核心能力,无疑将标准提升到了新的高度。

此次更新的核心在于两个功能:
- VoiceDesign(VD-Flash):通过文本描述来“设计”声音,彻底改变传统选音色的模式。
- VoiceClone(VC-Flash):仅需3秒音频,即可实现跨语言乃至跨物种的高保真音色克隆。
这意味着,Qwen3-TTS不仅让用户能自由创造声音,更在音色克隆的广度上取得了突破,将语音合成从“选择题”变成了“编程题”。
核心性能指标速览
在深入了解功能前,我们先看几个关键数据,感受其技术实力:
- ⚡ 0.1秒级生成速度
- 🌍 支持10种语言的混合克隆
- 🗣️ 内置50种声音与9种方言
- 📉 错误率较ElevenLabs/GPT-4o降低15%
- 🎭 角色扮演(Role-play)表现优于GPT-4o-mini和Gemini-2.5-pro
VoiceDesign:用文本“编程”声音
传统的TTS通常是在预设的音色库中进行选择,并调整语速、音高等参数。Qwen3-TTS的VoiceDesign功能彻底颠覆了这一流程,它允许你通过纯文本指令来定义声音的方方面面:
- 语气:如冷静、兴奋、疯狂、克制。
- 节奏:如急促、断句、停顿。
- 情绪:如愤怒、悲伤、戏谑、神秘。
- 表演风格:如旁白、角色扮演、AI助手。
你不再受限于预设音色,只需“描述”你想要的音色特征即可。根据官方测试,VoiceDesign在角色扮演方面的表现已显著超越GPT-4o-mini和Gemini-2.5-pro。

这终于让“一个声音演所有角色”的时代成为过去式。
VoiceClone:3秒音频,完美复刻
如果说VoiceDesign是“从0创造声音”,那么VoiceClone就是“精准复制现实世界的声音”。一个负责创造,另一个则负责复刻灵魂。
其核心亮点在于:仅需3秒的音频样本,即可克隆一个声音,并让该声音流利说出10种语言。 同时,它还具备比ElevenLabs/GPT-4o低15%的错误率,以及0.1秒级的实时生成速度。

因此,它在错误率、多语言稳定性以及音色一致性方面都更具优势。更引人注目的是,它支持对卡通音、夸张角色音乃至动物叫声等非常规音色进行克隆,这也是其“跨物种”能力的体现。
跨物种音色克隆:拓展应用边界
Qwen3-TTS本次更新最令人惊叹的一点,是正式支持了非传统人声的风格迁移。尽管官方描述谨慎,但从演示来看,无论是卡通角色还是拟人化的动物声音,都能被稳定地复刻和生成。这对于游戏、动画及IP角色的语音内容生产而言,无疑将大幅降低制作成本。
快速体验与集成
想要快速体验,可以直接访问阿里魔搭平台提供的Demo:
若需集成到自己的人工智能应用中,可以通过API进行调用。相关模型名称为:
- VoiceDesign:
qwen3-tts-vd-realtime-2025-12-16
- VoiceClone:
qwen3-tts-vc-realtime-2025-11-27
开发者需前往阿里云百炼开通服务,新用户通常享有免费额度。以下是使用Python调用VoiceClone API的示例代码:
import pyaudio
import os
import requests
import base64
import pathlib
import threading
import time
import dashscope # DashScope Python SDK 版本需要不低于1.23.9
from dashscope.audio.qwen_tts_realtime import QwenTtsRealtime, QwenTtsRealtimeCallback, AudioFormat
# ======= 常量配置 =======
DEFAULT_TARGET_MODEL = "qwen3-tts-vc-realtime-2025-11-27" # 声音复刻、语音合成要使用相同的模型
DEFAULT_PREFERRED_NAME = "guanyu"
DEFAULT_AUDIO_MIME_TYPE = "audio/mpeg"
VOICE_FILE_PATH = "voice.mp3" # 用于声音复刻的本地音频文件的相对路径
TEXT_TO_SYNTHESIZE = [
'对吧~我就特别喜欢这种超市,',
'尤其是过年的时候',
'去逛超市',
'就会觉得',
'超级超级开心!',
'想买好多好多的东西呢!'
]
def create_voice(file_path: str,
target_model: str = DEFAULT_TARGET_MODEL,
preferred_name: str = DEFAULT_PREFERRED_NAME,
audio_mime_type: str = DEFAULT_AUDIO_MIME_TYPE) -> str:
"""
创建音色,并返回 voice 参数
"""
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key = "sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY")
file_path_obj = pathlib.Path(file_path)
if not file_path_obj.exists():
raise FileNotFoundError(f"音频文件不存在: {file_path}")
base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
data_uri = f"data:{audio_mime_type};base64,{base64_str}"
# 以下为北京地域url,若使用新加坡地域的模型,需将url替换为:https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
url = "https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization"
payload = {
"model": "qwen-voice-enrollment", # 不要修改该值
"input": {
"action": "create",
"target_model": target_model,
"preferred_name": preferred_name,
"audio": {"data": data_uri}
}
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
resp = requests.post(url, json=payload, headers=headers)
if resp.status_code != 200:
raise RuntimeError(f"创建 voice 失败: {resp.status_code}, {resp.text}")
try:
return resp.json()["output"]["voice"]
except (KeyError, ValueError) as e:
raise RuntimeError(f"解析 voice 响应失败: {e}")
def init_dashscope_api_key():
"""
初始化 dashscope SDK 的 API key
"""
# 新加坡和北京地域的API Key不同。获取API Key:https://help.aliyun.com/zh/model-studio/get-api-key
# 若没有配置环境变量,请用百炼API Key将下行替换为:dashscope.api_key = "sk-xxx"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
# ======= 回调类 =======
class MyCallback(QwenTtsRealtimeCallback):
"""
自定义 TTS 流式回调
"""
def __init__(self):
self.complete_event = threading.Event()
self._player = pyaudio.PyAudio()
self._stream = self._player.open(
format=pyaudio.paInt16, channels=1, rate=24000, output=True
)
def on_open(self) -> None:
print('[TTS] 连接已建立')
def on_close(self, close_status_code, close_msg) -> None:
self._stream.stop_stream()
self._stream.close()
self._player.terminate()
print(f'[TTS] 连接关闭 code={close_status_code}, msg={close_msg}')
def on_event(self, response: dict) -> None:
try:
event_type = response.get('type', '')
if event_type == 'session.created':
print(f'[TTS] 会话开始: {response["session"]["id"]}')
elif event_type == 'response.audio.delta':
audio_data = base64.b64decode(response['delta'])
self._stream.write(audio_data)
elif event_type == 'response.done':
print(f'[TTS] 响应完成, Response ID: {qwen_tts_realtime.get_last_response_id()}')
elif event_type == 'session.finished':
print('[TTS] 会话结束')
self.complete_event.set()
except Exception as e:
print(f'[Error] 处理回调事件异常: {e}')
def wait_for_finished(self):
self.complete_event.wait()
# ======= 主执行逻辑 =======
if __name__ == '__main__':
init_dashscope_api_key()
print('[系统] 初始化 Qwen TTS Realtime ...')
callback = MyCallback()
qwen_tts_realtime = QwenTtsRealtime(
model=DEFAULT_TARGET_MODEL,
callback=callback,
# 以下为北京地域url,若使用新加坡地域的模型,需将url替换为:wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime
url='wss://dashscope.aliyuncs.com/api-ws/v1/realtime'
)
qwen_tts_realtime.connect()
qwen_tts_realtime.update_session(
voice=create_voice(VOICE_FILE_PATH), # 将voice参数替换为复刻生成的专属音色
response_format=AudioFormat.PCM_24000HZ_MONO_16BIT,
mode='server_commit'
)
for text_chunk in TEXT_TO_SYNTHESIZE:
print(f'[发送文本]: {text_chunk}')
qwen_tts_realtime.append_text(text_chunk)
time.sleep(0.1)
qwen_tts_realtime.finish()
callback.wait_for_finished()
print(f'[Metric] session_id={qwen_tts_realtime.get_session_id()}, '
f'first_audio_delay={qwen_tts_realtime.get_first_audio_delay()}s')
总结与展望
Qwen3-TTS的这次更新并非单纯的“炫技”,而是具备直接投入生产环境应用的成熟度。它清晰地揭示了一个趋势:语音合成技术正从简单的“音色播放”向复杂的“声音建模与设计”进化。
对于正在开发AI语音助手、多模态交互应用、游戏或虚拟角色等项目的开发者而言,Qwen3-TTS此次带来的VoiceDesign与VoiceClone能力,值得深入研究并集成到未来的应用场景中。
相关资源链接: