Files
aiData/WeiXin/TTS.md
HuangHai 0597d03a6a 'commit'
2026-01-31 16:31:22 +08:00

23 KiB
Raw Permalink Blame History

Qwen-TTS声音复刻API参考 更新时间2026-01-17 00:25:11 复制为 MD 格式 产品详情 我的收藏 声音复刻依托大模型进行特征提取,无需训练即可复刻声音。仅需提供 10~20 秒的音频,即可生成高度相似且听感自然的定制音色。声音复刻与语音合成是前后关联的两个步骤。本文档聚焦于介绍声音复刻的参数和接口细节,语音合成请参见实时语音合成-通义千问。

用户指南:关于模型介绍和选型建议请参见实时语音合成-通义千问。

音频要求 高质量的输入音频是获得优质复刻效果的基础。

项目

要求

支持格式

WAV (16bit)、MP3、M4A

音频时长

推荐10~20秒最长不得超过60秒

文件大小

10 MB

采样率

≥ 24 kHz

声道

单声道

内容

音频必须包含至少3秒连续清晰朗读无背景音其余部分仅允许短暂停顿≤2秒整段音频应避免背景音乐、噪音或其他人声确保核心朗读内容质量请使用正常说话音频作为输入不要上传歌曲或唱歌音频以确保复刻效果准确和可用

语言

中文zh、英文en、德语de、意大利语it、葡萄牙语pt、西班牙语es、日语ja、韩语ko、法语fr、俄语ru

快速开始:从复刻到合成 image

  1. 工作流程 声音复刻与语音合成是紧密关联的两个独立步骤,遵循“先创建,后使用”的流程:

创建音色

调用创建音色接口上传一段音频。系统会分析该音频创建一个专属的复刻音色。此步骤必须指定target_model声明创建的音色将由哪个语音合成模型驱动。

若已有创建好的音色(调用查询音色列表接口查看),可跳过这一步直接进行下一步。

使用音色进行语音合成

调用语音合成接口传入上一步获得的音色。此步骤指定的语音合成模型必须和上一步的target_model一致。

  1. 模型配置与准备工作 选择合适的模型并完成准备工作。

模型配置 声音复刻时需要指定以下两个模型:

声音复刻模型qwen-voice-enrollment

驱动音色的语音合成模型:

qwen3-tts-vc-realtime-2026-01-15

qwen3-tts-vc-realtime-2025-11-27

准备工作 获取API Key获取API Key为安全起见推荐将API Key配置到环境变量。

安装SDK确保已安装最新版DashScope SDK。

准备待复刻音频:音频需符合音频要求。

  1. 端到端示例 以下示例演示了如何在语音合成中使用声音复刻生成的专属音色,实现与原音高度相似的输出效果。

关键原则声音复刻时target_model驱动音色的语音合成模型必须与后续调用语音合成接口时指定的语音合成模型一致否则会合成失败。

示例使用本地音频文件 voice.mp3 进行声音复刻,运行代码时,请注意替换。

PythonJava

coding=utf-8

Installation instructions for pyaudio:

APPLE Mac OS X

brew install portaudio

pip install pyaudio

Debian/Ubuntu

sudo apt-get install python-pyaudio python3-pyaudio

or

pip install pyaudio

CentOS

sudo yum install -y portaudio portaudio-devel && pip install pyaudio

Microsoft Windows

python -m pip install pyaudio

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-2026-01-15" # 声音复刻、语音合成要使用相同的模型 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 Keyhttps://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 Keyhttps://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')

API参考 使用不同 API 时,请确保使用同一账号进行操作。

创建音色 上传用于复刻的音频,创建自定义音色。

URL

中国内地:

POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization 国际:

POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization 请求头

参数

类型

是否必须

说明

Authorization

string

支持

鉴权令牌格式为Bearer <your_api_key>,使用时,将“<your_api_key>”替换为实际的API Key。

Content-Type

string

支持

请求体中传输的数据的媒体类型。固定为application/json。

消息体

包含所有请求参数的消息体如下,对于可选字段,在实际业务中可根据需求省略。

重要 注意区分如下参数:

model声音复刻模型固定为qwen-voice-enrollment

target_model驱动音色的语音合成模型须和后续调用语音合成接口时使用的语音合成模型一致否则合成会失败

{ "model": "qwen-voice-enrollment", "input": { "action": "create", "target_model": "qwen3-tts-vc-realtime-2026-01-15", "preferred_name": "guanyu", "audio": { "data": "https://xxx.wav" }, "text": "可选项填入audio.data对应的文本", "language": "可选项填入audio.data对应的语种如zh" } } 请求参数

参数

类型

默认值

是否必须

说明

model

string

支持

声音复刻模型固定为qwen-voice-enrollment。

action

string

支持

操作类型固定为create。

target_model

string

支持

驱动音色的语音合成模型,支持的模型有:

qwen3-tts-vc-realtime-2026-01-15

qwen3-tts-vc-realtime-2025-11-27

必须与后续调用语音合成接口时使用的语音合成模型一致,否则合成会失败。

preferred_name

string

支持

为音色指定一个便于识别的名称仅允许数字、大小写字母和下划线不超过16个字符。建议选用与角色、场景相关的标识。

该关键字会在复刻的音色名中出现例如关键字为“guanyu”最终音色名为“qwen-tts-vc-guanyu-voice-20250812105009984-838b” audio.data

string

支持

用于复刻的音频(录制时需遵循录音操作指南,音频需满足音频要求)。

可通过以下两种方式提交音频数据:

Data URL

格式data:;base64,

MIME类型

WAVaudio/wav

MP3audio/mpeg

M4Aaudio/mp4

音频转成的Base64编码的字符串

Base64编码会增大体积请控制原文件大小确保编码后仍小于10MB

示例data:audio/wav;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA//PAxABQ/BXRbMPe4IQAhl9

点击查看示例代码

音频URL推荐将音频上传至OSS

文件大小不超过10MB

URL必须公网可访问且无需鉴权

text

string

不支持

与audio.data音频内容相匹配的文本。

传入该参数后服务端会对比音频与该文本的差异若差异过大将返回Audio.PreprocessError。

language

string

不支持

audio.data音频对应的语种。

支持zh中文、en英文、de德语、it意大利语、pt葡萄牙语、es西班牙语、ja日语、ko韩语、fr法语、ru俄语

若使用该参数,设置的语种要和实际用于复刻的音频的语种一致。

响应参数

点击查看响应示例

需关注的参数如下:

参数

类型

说明

voice

string

音色名称可直接用于语音合成接口的voice参数。

target_model

string

驱动音色的语音合成模型,支持的模型有:

qwen3-tts-vc-realtime-2026-01-15

qwen3-tts-vc-realtime-2025-11-27

必须与后续调用语音合成接口时使用的语音合成模型一致,否则合成会失败。

request_id

string

Request ID。

count

integer

本次请求实际计入费用的“创建音色”次数,本次请求的费用为 count×0.01 元。

创建音色时count恒为1。

示例代码

重要 注意区分如下参数:

model声音复刻模型固定为qwen-voice-enrollment

target_model驱动音色的语音合成模型须和后续调用语音合成接口时使用的语音合成模型一致否则合成会失败

cURLPythonJava 若未将API Key配置到环境变量需将示例中的$DASHSCOPE_API_KEY替换为实际的API Key。

======= 重要提示 =======

以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization

新加坡地域和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key

=== 执行时请删除该注释 ===

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
-H "Authorization: Bearer $DASHSCOPE_API_KEY"
-H "Content-Type: application/json"
-d '{ "model": "qwen-voice-enrollment", "input": { "action": "create", "target_model": "qwen3-tts-vc-realtime-2026-01-15", "preferred_name": "guanyu", "audio": { "data": "https://xxx.wav" } } }' 查询音色列表 分页查询已创建的音色列表。

URL

中国内地:

POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization 国际:

POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization 请求头

参数

类型

是否必须

说明

Authorization

string

支持

鉴权令牌格式为Bearer <your_api_key>,使用时,将“<your_api_key>”替换为实际的API Key。

Content-Type

string

支持

请求体中传输的数据的媒体类型。固定为application/json。

消息体

包含所有请求参数的消息体如下,对于可选字段,在实际业务中可根据需求省略。

重要 model声音复刻模型固定为qwen-voice-enrollment请勿修改。

{ "model": "qwen-voice-enrollment", "input": { "action": "list", "page_size": 2, "page_index": 0 } } 请求参数

参数

类型

默认值

是否必须

说明

model

string

支持

声音复刻模型固定为qwen-voice-enrollment。

action

string

支持

操作类型固定为list。

page_index

integer

0

不支持

页码索引。取值范围:[0, 1000000]。

page_size

integer

10

不支持

每页包含数据条数。取值范围:[0, 1000000]。

响应参数

点击查看响应示例

需关注的参数如下:

参数

类型

说明

voice

string

音色名称可直接用于语音合成接口的voice参数。

gmt_create

string

创建音色的时间。

target_model

string

驱动音色的语音合成模型,支持的模型有:

qwen3-tts-vc-realtime-2026-01-15

qwen3-tts-vc-realtime-2025-11-27

必须与后续调用语音合成接口时使用的语音合成模型一致,否则合成会失败。

request_id

string

Request ID。

count

integer

本次请求实际计入费用的“创建音色”次数,本次请求的费用为 count×0.01 元。

查询音色不计费因此count恒为0。

示例代码

重要 model声音复刻模型固定为qwen-voice-enrollment请勿修改。

cURLPythonJava 若未将API Key配置到环境变量需将示例中的$DASHSCOPE_API_KEY替换为实际的API Key。

======= 重要提示 =======

以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization

新加坡地域和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key

=== 执行时请删除该注释 ===

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization'
--header 'Authorization: Bearer $DASHSCOPE_API_KEY'
--header 'Content-Type: application/json'
--data '{ "model": "qwen-voice-enrollment", "input": { "action": "list", "page_size": 10, "page_index": 0 } }' 删除音色 删除指定音色,释放对应额度。

URL

中国内地:

POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization 国际:

POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization 请求头

参数

类型

是否必须

说明

Authorization

string

支持

鉴权令牌格式为Bearer <your_api_key>,使用时,将“<your_api_key>”替换为实际的API Key。

Content-Type

string

支持

请求体中传输的数据的媒体类型。固定为application/json。

消息体

包含所有请求参数的消息体如下,对于可选字段,在实际业务中可根据需求省略:

重要 model声音复刻模型固定为qwen-voice-enrollment请勿修改。

{ "model": "qwen-voice-enrollment", "input": { "action": "delete", "voice": "yourVoice" } } 请求参数

参数

类型

默认值

是否必须

说明

model

string

支持

声音复刻模型固定为qwen-voice-enrollment。

action

string

支持

操作类型固定为delete。

voice

string

支持

待删除的音色。

响应参数

点击查看响应示例

需关注的参数如下:

参数

类型

说明

request_id

string

Request ID。

count

integer

本次请求实际计入费用的“创建音色”次数,本次请求的费用为 count×0.01 元。

删除音色不计费因此count恒为0。

示例代码

重要 model声音复刻模型固定为qwen-voice-enrollment请勿修改。

cURLPythonJava 若未将API Key配置到环境变量需将示例中的$DASHSCOPE_API_KEY替换为实际的API Key。

======= 重要提示 =======

以下为北京地域url若使用新加坡地域的模型需将url替换为https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization

新加坡地域和北京地域的API Key不同。获取API Keyhttps://help.aliyun.com/zh/model-studio/get-api-key

=== 执行时请删除该注释 ===

curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization'
--header 'Authorization: Bearer $DASHSCOPE_API_KEY'
--header 'Content-Type: application/json'
--data '{ "model": "qwen-voice-enrollment", "input": { "action": "delete", "voice": "yourVoice" } }' 语音合成 如何使用声音复刻生成的专属音色合成个性化的声音,请参见快速开始:从复刻到合成。

用于声音复刻的语音合成模型(如 qwen3-tts-vc-realtime-2026-01-15为专用模型仅支持使用复刻生成的音色不支持Chelsie、Serena、Ethan、Cherry等公共预设音色。

音色配额与自动清理规则 总数限制1000个音色/账号

当前接口不提供音色数量查询功能,可通过调用查询音色列表接口自行统计音色数目 自动清理:若单个音色在过去一年内未被用于任何语音合成请求,系统将自动将其删除

计费说明 声音复刻和语音合成分开计费:

声音复刻创建音色按0.01 元/个计费,创建失败不计费

说明 免费额度说明(仅中国站北京地域和国际站新加坡地域有免费额度):

阿里云百炼开通后90天内可享1000次免费音色创建机会。

创建失败不占用免费次数。

删除音色不会恢复免费次数。

免费额度用完或超出 90 天有效期后创建音色将按0.01 元/个的价格计费。

使用复刻生成的专属音色进行语音合成:按量(文本字符数)计费,详情请参见实时语音合成-通义千问

版权与合法性 您需对所提供声音的所有权及合法使用权负责,请注意阅读服务协议。

录音操作指南 录音设备 推荐使用具备降噪功能的麦克风,或在安静环境下使用手机近距离录音,以保证音源纯净。

录音环境 场地 建议在 10 平方米以内的小型封闭空间录音。

优先选择配有吸音材料(如吸音棉、地毯、窗帘)的房间。

避免空旷大厅、会议室、教室等高混响场所。

噪音控制 室外噪音:关闭门窗,避免交通、施工等干扰。

室内噪音:关闭空调、风扇、日光灯镇流器等设备;可通过手机录制环境音并放大播放,识别潜在噪音源。

混响控制 混响会导致声音模糊、清晰度下降。

减少光滑表面反射:拉上窗帘、打开衣柜门、铺放衣物或床单覆盖桌面/柜面。

利用不规则物体(如书架、软包家具)实现声波漫反射。

录音文案 文案内容灵活,建议与目标应用场景一致(例如,若用于客服场景,文案应为客服对话风格),但必须确保不包含任何敏感或非法词汇(如政治、色情、暴力相关内容),否则会导致复刻失败。

避免短句(如“你好”、“是的”),应使用完整句子。

保持语义连贯,朗读时避免频繁停顿(建议至少连续 3 秒无中断)。

可带入目标情绪(如亲切、严肃),但需避免过度夸张的戏剧化朗读,保持语调自然。

操作建议 以普通卧室为例:

关闭门窗,隔绝外部噪音。

关闭空调、电扇等电器。

拉上窗帘,减少玻璃反射。

在桌面铺放衣物或毛毯,降低桌面反射。

提前熟悉文案,设定角色语气,自然演绎。

与录音设备保持约 10 厘米距离,避免喷麦或信号过弱。