根据音频样本创建自定义音色,用于语音合成或实时语音对话。
功能介绍
声音复刻适用于个性化语音助手、品牌专属播报和有声内容定制等场景,无需训练模型。
说明如需通过自然语言描述创建音色,无需提供音频样本,请使用声音设计。
准备工作
-
获取 API Key,并将其配置到环境变量
DASHSCOPE_API_KEY。 -
获取业务空间 ID,将示例中的
YOUR_WORKSPACE_ID替换为真实值。获取方式请参见地域与接入域名。 -
安装 Python HTTP 库
requests:pip install requests -
准备符合音频要求的音频文件。Qwen-Audio-TTS、Qwen-Audio-Realtime 和 CosyVoice 支持公网 URL 或 Base64 Data URI;MiniMax 仍使用公网 URL。以下示例使用示例音频的 URL,本地音频的编码和传参方式请参见 HTTP API。
开始使用
说明Qwen-Audio-TTS / Qwen-Audio-Realtime / CosyVoice 的复刻音色在创建时绑定到 target_model,不能跨模型使用。如需让多个模型使用同一段音频的声音,应为每个模型分别创建音色。
Qwen-Audio-TTS / CosyVoice
Qwen-Audio-TTS 和 CosyVoice 使用相同的音色创建和基础合成流程。以下以 qwen-audio-3.1-tts-flash 为例。
- 创建音色:通过 HTTP API 的
audio字段传入参考音频 URL 或 Base64 Data URI,target_model指定目标模型,prefix为音色名称前缀。 - 合成语音:将返回的音色 ID 传入
voice,使用同一个目标模型合成语音并保存音频。
import os
import time
import requests
workspace_id = "YOUR_WORKSPACE_ID"
target_model = "qwen-audio-3.1-tts-flash"
base_url = f"https://{workspace_id}.cn-beijing.maas.aliyuncs.com/api/v1"
headers = {"Authorization": f"Bearer {os.environ['DASHSCOPE_API_KEY']}"}
response = requests.post(
f"{base_url}/services/audio/tts/customization",
headers=headers,
json={
"model": "voice-enrollment",
"input": {
"action": "create_voice",
"target_model": target_model,
"prefix": "myvoice",
"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/cosyvoice/cosyvoice-zeroshot-sample.wav",
},
},
timeout=60,
)
response.raise_for_status()
voice_id = response.json()["output"]["voice_id"]
print(f"voice_id: {voice_id}")
for _ in range(30):
response = requests.post(
f"{base_url}/services/audio/tts/customization",
headers=headers,
json={
"model": "voice-enrollment",
"input": {"action": "query_voice", "voice_id": voice_id},
},
timeout=60,
)
response.raise_for_status()
status = response.json()["output"]["status"]
if status == "OK":
break
if status != "DEPLOYING":
raise RuntimeError(f"Voice status: {status}")
time.sleep(1)
else:
raise TimeoutError("Voice is not ready")
response = requests.post(
f"{base_url}/services/audio/tts/SpeechSynthesizer",
headers=headers,
json={
"model": target_model,
"input": {
"text": "今天天气晴朗,适合外出散步。祝你度过愉快的一天。",
"voice": voice_id,
"format": "wav",
"sample_rate": 24000,
},
},
timeout=60,
)
response.raise_for_status()
audio_url = response.json()["output"]["audio"]["url"]
audio_response = requests.get(audio_url, timeout=60)
audio_response.raise_for_status()
with open("output.wav", "wb") as f:
f.write(audio_response.content)
运行后,合成音频保存为 output.wav。保存打印的音色 ID,后续可继续使用。
Qwen-Audio-Realtime
Qwen-Audio-Realtime 的复刻音色用于自定义实时语音对话的回复声音。以下以 qwen-audio-3.1-realtime-plus 为例创建音色。
import os
import time
import requests
workspace_id = "YOUR_WORKSPACE_ID"
target_model = "qwen-audio-3.1-realtime-plus"
base_url = f"https://{workspace_id}.cn-beijing.maas.aliyuncs.com/api/v1"
headers = {"Authorization": f"Bearer {os.environ['DASHSCOPE_API_KEY']}"}
response = requests.post(
f"{base_url}/services/audio/tts/customization",
headers=headers,
json={
"model": "voice-enrollment",
"input": {
"action": "create_voice",
"target_model": target_model,
"prefix": "myvoice",
"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/cosyvoice/cosyvoice-zeroshot-sample.wav",
},
},
timeout=60,
)
response.raise_for_status()
voice_id = response.json()["output"]["voice_id"]
print(f"voice_id: {voice_id}")
for _ in range(30):
response = requests.post(
f"{base_url}/services/audio/tts/customization",
headers=headers,
json={
"model": "voice-enrollment",
"input": {"action": "query_voice", "voice_id": voice_id},
},
timeout=60,
)
response.raise_for_status()
status = response.json()["output"]["status"]
if status == "OK":
break
if status != "DEPLOYING":
raise RuntimeError(f"Voice status: {status}")
time.sleep(1)
else:
raise TimeoutError("Voice is not ready")
建立实时语音对话连接后,在首次 session.update 事件中,将 session.voice 设置为返回的音色 ID(替换下方的 VOICE_ID)。会话模型必须与创建音色时的 target_model 一致。
{
"type": "session.update",
"session": {
"voice": "VOICE_ID"
}
}
更多声音复刻参数与示例请参见 HTTP API、Python SDK和 Java SDK。
使用复刻音色进行语音合成或实时语音对话的调用方式,请参见:
音频要求
输入音频的质量会影响音色的相似度和自然度。按目标模型的规格准备样本,并参照下方录音建议减少噪声、混响和其他人声。
| 项目 | 要求 |
|---|---|
支持格式 | WAV(16-bit)、MP3、M4A |
音频时长 | 推荐 10~20 秒,最长不超过 60 秒。 |
文件大小 | ≤ 10 MB |
采样率 | ≥ 16 kHz |
声道 | 单声道或双声道。双声道音频仅处理首声道,首声道需包含有效人声。 |
内容 | 至少包含 5 秒连续清晰的朗读内容,其余部分仅允许短暂停顿(≤ 2 秒)。避免背景音乐、环境噪声和其他人声。使用正常语速的说话音频,不使用歌曲或唱歌录音。 |
支持语言 |
点击查看 CosyVoice 各模型支持的语言
|
清晰、自然的录音有助于获得高质量的参考音频并保留声音特征。录音前可参考以下录音与操作建议。
点击查看录音与操作建议
录音设备
可使用手机、数字录音笔、专业录音机等。建议使用支持高采样率(≥ 24 kHz)录音的设备,以满足音频要求。
录音环境
场地
- 建议在 10 平方米以内的小型封闭空间录音。
- 优先选择配有吸音材料(如吸音棉、地毯、窗帘)的房间。
- 避免空旷大厅、会议室、教室等高混响场所。
噪音控制
- 室外噪音:关闭门窗,避免交通、施工等干扰。
- 室内噪音:关闭空调、风扇、日光灯镇流器等设备;可通过手机录制环境音并放大播放,识别潜在噪音源。
混响控制
- 混响会导致声音模糊、清晰度下降。
- 减少光滑表面反射:拉上窗帘、打开衣柜门、铺放衣物或床单覆盖桌面/柜面。
- 利用不规则物体(如书架、软包家具)实现声波漫反射。
录音文案
- 内容无特殊限制,建议与目标应用场景一致。
- 避免短句(如你好、是的),应使用完整句子。
- 保持语义连贯,朗读时避免频繁停顿(建议至少连续 3 秒无中断)。
- 录音全程保持一致的语速,避免开头或结尾语速过快导致合成时出现卡顿。
- 可加入适当情绪表达(如温暖、亲切、严肃),避免机械朗读。
- 不包含敏感词汇(如政治、色情、暴力相关内容),否则会导致复刻失败。
操作建议
以普通卧室为例,完成降噪和混响控制后:
- 提前熟悉文案,设定角色语气,自然演绎。
- 与录音设备保持约 10 厘米距离,避免喷麦或信号过弱。
音色管理
Qwen-Audio-TTS、Qwen-Audio-Realtime 和 CosyVoice 使用相同的音色查询、更新与删除接口。具体接口与参数请参见声音复刻 HTTP API 参考。
- 查询音色列表:查看账号下已有的自定义音色。
- 查询音色详情:查看创建时间、绑定模型等信息。
- 更新音色:替换参考音频,保留原有音色 ID。
- 删除音色:删除不再使用的音色,释放配额。
创建的音色默认长期有效。保存音色 ID,需要时可通过查询接口确认音色是否可用。
支持模型
华北2(北京)
使用该地域的 API Key 调用以下模型:
-
Qwen-Audio-TTS:qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash
-
Qwen-Audio-Realtime:qwen-audio-3.1-realtime-plus、qwen-audio-3.0-realtime-plus、qwen-audio-3.0-realtime-flash
-
CosyVoice:cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-plus、cosyvoice-v3-flash、cosyvoice-v2
新加坡
使用该地域的 API Key 调用以下模型:
-
Qwen-Audio-TTS:qwen-audio-3.1-tts-plus、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash
-
CosyVoice:cosyvoice-v3-plus、cosyvoice-v3-flash
配额与限制
-
音色数量:每个阿里云百炼账号的自定义音色总数上限为 1000 个。声音复刻和声音设计共用该配额,不按模型分别计算。
说明
- 达到上限后,新的声音复刻或声音设计创建请求将失败。需先删除不再使用的音色,释放配额后再创建。
计费说明
- Qwen-Audio-TTS / Qwen-Audio-Realtime / CosyVoice:创建音色免费。使用复刻音色合成语音或进行实时语音对话时,按目标模型计费。具体费用请参见模型计费。