聲音複刻
聲音複刻(Voice Cloning)只需提供一段 10~20 秒的音頻樣本,即可產生高度相似的定製音色,無需模型訓練。
概述
適用於個人化語音助手、品牌專屬播報、有聲內容定製化等情境。
阿里雲百鍊平台提供以下模型系列的聲音複刻能力:
-
CosyVoice:通過 DashScope SDK 或 HTTP API 建立音色,支援即時語音合成,可用於北京和新加坡地區。
-
Qwen-TTS:通過 HTTP API 建立音色,支援即時與非即時語音合成,可用於北京和新加坡地區。
如需瞭解各模型系列的詳細對比和選型建議,請參見語音合成。
前提條件
-
已配置 API Key並將其設定到環境變數。
-
如果通過 DashScope SDK 調用,需要安裝最新版SDK。
-
準備音頻檔案:音頻需符合音頻要求。
快速開始
聲音複刻的使用分為以下三步:
-
準備音頻:準備一段符合音頻要求的音頻檔案。
-
建立音色:調用聲音複刻介面上傳音頻建立音色,通過
target_model指定綁定的語音合成模型。 -
使用音色合成語音:調用語音合成介面,傳入建立音色時返回的音色 ID。
CosyVoice 聲音複刻
CosyVoice 聲音複刻支援北京地區(v3.5/v3/v2/v1 系列)和新加坡地區(僅 v3 系列)。
步驟一:建立音色
調用聲音複刻 API 上傳音頻並建立音色。url參數傳入音頻檔案的可存取 URL 地址,prefix參數作為音色名稱首碼。
以下為新加坡地區 URL,若使用北京地區的模型,需將 URL 替換為:https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/tts/customization。
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/audio/tts/customization' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "voice-enrollment",
"input": {
"action": "create_voice",
"target_model": "cosyvoice-v3-plus",
"prefix": "myvoice",
"url": "https://your-audio-url.wav"
}
}'
步驟二:使用複刻音色合成語音
將上一步返回的voice_id值填入以下請求中。
# coding=utf-8
import dashscope
from dashscope.audio.tts_v2 import *
import os
# 新加坡地區和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 若沒有配置環境變數,請用阿里雲百鍊API Key將下行替換為:dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
# 以下為新加坡地區URL,調用時請將WorkspaceId替換為真實的業務空間ID,各地區的URL不同。
dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'
# 聲音複刻、語音合成要使用相同的模型
model = "cosyvoice-v3-plus"
# 將voice參數替換為聲音複刻產生的專屬音色
voice = "voice_id"
# 執行個體化SpeechSynthesizer,並在構造方法中傳入模型(model)、音色(voice)等請求參數
synthesizer = SpeechSynthesizer(model=model, voice=voice)
# 發送待合成文本,擷取二進位音頻
audio = synthesizer.call("今天天氣怎麼樣?")
# 首次發送文本時需建立 WebSocket 串連,因此首包延遲會包含串連建立的耗時
print('[Metric] requestId為:{},首包延遲為:{}毫秒'.format(
synthesizer.get_last_request_id(),
synthesizer.get_first_package_delay()))
# 將音頻儲存至本地
with open('output.mp3', 'wb') as f:
f.write(audio)
Qwen-TTS 聲音複刻
樣本使用本地音頻檔案voice.mp3,運行時請替換為實際路徑。
建立音色時的target_model必須與語音合成時使用的模型完全一致,否則合成將失敗。
Python
import os
import requests
import base64
import pathlib
import dashscope
# ======= 常量配置 =======
DEFAULT_TARGET_MODEL = "qwen3-tts-vc-2026-01-22" # 聲音複刻、語音合成要使用相同的模型
DEFAULT_PREFERRED_NAME = "guanyu"
DEFAULT_AUDIO_MIME_TYPE = "audio/mpeg"
VOICE_FILE_PATH = "voice.mp3" # 用於聲音複刻的本地音頻檔案的相對路徑
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://www.alibabacloud.com/help/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,調用時請將WorkspaceId替換為真實的業務空間ID,各地區的URL不同。
url = "https://{WorkspaceId}.ap-southeast-1.maas.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}")
if __name__ == '__main__':
# 以下為新加坡地區URL,調用時請將WorkspaceId替換為真實的業務空間ID,各地區的URL不同。
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
text = "今天天氣怎麼樣?"
response = dashscope.MultiModalConversation.call(
model=DEFAULT_TARGET_MODEL,
api_key=os.getenv("DASHSCOPE_API_KEY"),
text=text,
voice=create_voice(VOICE_FILE_PATH), # 將voice參數替換為複刻產生的專屬音色
stream=False
)
print(response)
cURL
步驟一:建立音色
將data替換為實際音頻檔案路徑。
以下為新加坡地區URL,調用時請將WorkspaceId替換為真實的業務空間ID,各地區的URL不同。
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.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-2026-01-22",
"preferred_name": "guanyu",
"audio": {
"data": "https://xxx.wav"
}
}
}'
步驟二:使用複刻音色合成語音
將 YOUR_VOICE_ID 替換為上一步返回的 voice 值。
以下為新加坡地區URL,調用時請將WorkspaceId替換為真實的業務空間ID,各地區的URL不同。
curl -X POST 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-tts-vc-2026-01-22",
"input": {
"text": "今天天氣怎麼樣?",
"voice": "YOUR_VOICE_ID"
}
}'
音頻要求
輸入音訊品質直接決定複刻效果。不同模型系列對音訊具體要求有所差異,請按照目標模型的要求準備音頻樣本。
CosyVoice
|
專案 |
要求 |
|
支援格式 |
WAV (16bit)、MP3、M4A |
|
音頻時間長度 |
推薦 10~20 秒,最長不超過 60 秒 |
|
檔案大小 |
≤ 10 MB |
|
採樣率 |
≥ 16 kHz |
|
聲道 |
單聲道或雙聲道。雙聲道音頻僅處理首聲道,請確保首聲道包含有效人聲。 |
|
內容 |
音頻必須包含至少 5 秒連續清晰的朗讀內容(無背景音),其餘部分僅允許短暫停頓(≤ 2 秒)。整段音頻應避免出現背景音樂、環境噪音或其他人聲。請使用正常語速的說話音頻,不要上傳歌曲或唱歌錄音。 |
|
支援語言 |
因驅動音色的語音合成模型(通過
|
Qwen-TTS
|
專案 |
要求 |
|
支援格式 |
WAV (16bit)、MP3、M4A |
|
音頻時間長度 |
推薦 10~20 秒,最長不超過 60 秒 |
|
檔案大小 |
≤ 10 MB |
|
採樣率 |
≥ 24 kHz |
|
聲道 |
單聲道 |
|
內容 |
音頻必須包含至少 3 秒連續清晰的朗讀內容(無背景音),其餘部分僅允許短暫停頓(≤ 2 秒)。整段音頻應避免出現背景音樂、環境噪音或其他人聲。請使用正常語速的說話音頻,不要上傳歌曲或唱歌錄音。 |
|
支援語言 |
中文、英文、德語、意大利語、葡萄牙語、西班牙語、日語、韓語、法語、俄語 |
為獲得最佳複刻效果,建議參照錄音建議準備樣本。
錄音建議
高品質的輸入音頻是獲得優質複刻效果的基礎。
錄音裝置
可使用手機、數字錄音筆、專業錄音機等。建議使用支援高採樣率(≥ 24 kHz)錄音的裝置,以滿足音頻要求。
錄音環境
場地
-
建議在 10 平方米以內的小型封閉空間錄音。
-
優先選擇配有吸音材料(如吸音棉、地毯、窗帘)的房間。
-
避免空曠大廳、會議室、教室等高混響場所。
噪音控制
-
室外噪音:關閉門窗,避免交通、施工等幹擾。
-
室內噪音:關閉空調、風扇、日光燈鎮流器等裝置;可通過手機錄製環境音並放大播放,識別潛在噪音源。
混響控制
-
混響會導致聲音模糊、清晰度下降。
-
減少光滑表面反射:拉上窗帘、開啟衣櫃門、鋪放衣物或床單覆蓋案頭/櫃面。
-
利用不規則物體(如書架、軟包傢具)實現聲波漫反射。
錄音文案
-
內容無特殊限制,建議與目標應用情境一致。
-
避免短句(如"你好"、"是的"),應使用完整句子。
-
保持語義連貫,朗讀時避免頻繁停頓(建議至少連續 3 秒無中斷)。
-
錄音全程保持一致的語速,避免開頭或結尾語速過快導致合成時出現卡頓。
-
可加入適當情緒表達(如溫暖、親切、嚴肅),避免機械朗讀。
-
不包含禁用語(如政治、色情、暴力相關內容),否則會導致複刻失敗。
操作建議
以普通臥室為例,完成降噪和混響控制後:
-
提前熟悉文案,設定角色語氣,自然演繹。
-
與錄音裝置保持約 10 厘米距離,避免噴麥或訊號過弱。
管理自訂音色
音色建立完成後,您可以通過 API 對已有音色進行查詢和管理(Qwen-TTS 和 CosyVoice 支援)。
-
查詢音色列表:擷取當前帳號下所有自訂音色的列表。
-
查詢音色詳情(僅 CosyVoice):查看指定音色的詳細資料,如建立時間、綁定的語音合成模型等。
-
刪除音色:刪除不再需要的自訂音色,釋放配額。
各模型的 API 介面和參數詳情請參見API 參考。
配額與計費
音色配額與自動清理
-
音色總數限制:每個阿里雲百鍊帳號下,CosyVoice 與 Qwen-TTS 分別最多可建立 1000 個自訂音色(兩類配額獨立計算)。達到上限後,新的建立請求將直接失敗並返回錯誤,系統不會自動刪除最早建立的複刻音色。如需建立新音色,請先刪除不需要的音色以釋放配額,或等待未被使用的音色自動清理(詳見下方自動清理規則)。
-
上限後建立行為:達到 1000 個音色上限後,繼續調用建立音色介面將直接返回失敗錯誤,系統不會自動淘汰最早建立的複刻音色來騰出空間。需手動刪除不需要的音色釋放配額後才能繼續建立。
-
自動清理規則:若單個音色在過去 1 年內未被用於任何語音合成請求,系統將自動刪除該音色。
計費規則
-
CosyVoice:建立音色免費。
-
Qwen-TTS:按 $0.01/個 計費,建立失敗不計費。
免費額度(僅新加坡地區提供):
-
阿里雲百鍊開通後 90 天內,可享 1000 次免費音色建立機會。
-
建立失敗不佔用免費次數。
-
刪除音色不會恢複免費次數。
-
免費額度用完或超出 90 天有效期間後,建立音色將按 $0.01/個 的價格計費。
-
支援的模型與地區
新加坡
調用以下模型時,請選擇新加坡地區的API Key:
-
CosyVoice:cosyvoice-v3-plus、cosyvoice-v3-flash
-
Qwen-TTS:
-
Qwen3-TTS-VC-Realtime:qwen3-tts-vc-realtime-2026-01-15(最新快照版)、qwen3-tts-vc-realtime-2025-11-27(快照版)
-
Qwen3-TTS-VC:qwen3-tts-vc-2026-01-22(最新快照版)
-
華北2(北京)
調用以下模型時,請選擇北京地區的API Key:
-
CosyVoice:cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-plus、cosyvoice-v3-flash、cosyvoice-v2、cosyvoice-v1
-
Qwen-TTS:
-
Qwen3-TTS-VC-Realtime:qwen3-tts-vc-realtime-2026-01-15(最新快照版)、qwen3-tts-vc-realtime-2025-11-27(快照版)
-
Qwen3-TTS-VC:qwen3-tts-vc-2026-01-22(最新快照版)
-
API 參考
常見問題
Q:建立音色後可以用於不同的語音合成模型嗎?
不可以。音色在建立時通過target_model綁定到特定的語音合成模型,不能跨模型使用。如果您需要在多個模型上使用同一段音訊聲音,請為每個模型分別建立音色。
Q:複刻音色的有效期間是多久?
Qwen-TTS 和 CosyVoice 建立的音色預設長期有效。若單個音色在過去 1 年內未被用於任何語音合成請求,系統將自動刪除該音色,詳情請參見音色配額與自動清理。建議妥善儲存音色 ID,需要時可通過查詢介面確認音色是否仍然可用。
Q:音頻品質不好會影響複刻效果嗎?
輸入音訊品質直接影響複刻效果。背景雜音、混響、多人聲等問題都會降低複刻音色的相似性和自然度。建議參照音頻要求和錄音建議準備樣本。