聲音複刻

更新時間:
Copy as MD

聲音複刻(Voice Cloning)只需提供一段 10~20 秒的音頻樣本,即可產生高度相似的定製音色,無需模型訓練。

概述

適用於個人化語音助手、品牌專屬播報、有聲內容定製化等情境。

阿里雲百鍊平台提供以下模型系列的聲音複刻能力:

  • CosyVoice:通過 DashScope SDK 或 HTTP API 建立音色,支援即時語音合成,可用於北京和新加坡地區。

  • Qwen-TTS:通過 HTTP API 建立音色,支援即時與非即時語音合成,可用於北京和新加坡地區。

如需瞭解各模型系列的詳細對比和選型建議,請參見語音合成

前提條件

  1. 配置 API Key並將其設定到環境變數

  2. 如果通過 DashScope SDK 調用,需要安裝最新版SDK

  3. 準備音頻檔案:音頻需符合音頻要求

快速開始

聲音複刻的使用分為以下三步:

  1. 準備音頻:準備一段符合音頻要求的音頻檔案。

  2. 建立音色:調用聲音複刻介面上傳音頻建立音色,通過target_model指定綁定的語音合成模型。

  3. 使用音色合成語音:調用語音合成介面,傳入建立音色時返回的音色 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 秒)。整段音頻應避免出現背景音樂、環境噪音或其他人聲。請使用正常語速的說話音頻,不要上傳歌曲或唱歌錄音。

支援語言

因驅動音色的語音合成模型(通過 target_model 參數指定)而異:

  • cosyvoice-v2:中文(普通話)、英文

  • cosyvoice-v3-flash:中文(普通話、廣東話、東北話、甘肅話、貴州話、河南話、湖北話、江西話、閩南話、寧夏話、山西話、陝西話、山東話、上海話、四川話、天津話、雲南話)、英文、法語、德語、日語、韓語、俄語、葡萄牙語、泰語、印尼語、越南語

  • cosyvoice-v3-plus:中文(普通話、廣東話、東北話、甘肅話、貴州話、河南話、湖北話、江西話、閩南話、寧夏話、山西話、陝西話、山東話、上海話、四川話、天津話、雲南話)、英文、法語、德語、日語、韓語、俄語

  • cosyvoice-v3.5-plus、cosyvoice-v3.5-flash:中文(普通話、廣東話、東北話、甘肅話、貴州話、河南話、湖北話、江西話、閩南話、寧夏話、山西話、陝西話、山東話、上海話、四川話、天津話、雲南話)、英文、法語、德語、日語、韓語、俄語、葡萄牙語、泰語、印尼語、越南語

Qwen-TTS

專案

要求

支援格式

WAV (16bit)、MP3、M4A

音頻時間長度

推薦 10~20 秒,最長不超過 60 秒

檔案大小

≤ 10 MB

採樣率

≥ 24 kHz

聲道

單聲道

內容

音頻必須包含至少 3 秒連續清晰的朗讀內容(無背景音),其餘部分僅允許短暫停頓(≤ 2 秒)。整段音頻應避免出現背景音樂、環境噪音或其他人聲。請使用正常語速的說話音頻,不要上傳歌曲或唱歌錄音。

支援語言

中文、英文、德語、意大利語、葡萄牙語、西班牙語、日語、韓語、法語、俄語

說明

為獲得最佳複刻效果,建議參照錄音建議準備樣本。

錄音建議

高品質的輸入音頻是獲得優質複刻效果的基礎。

錄音裝置

可使用手機、數字錄音筆、專業錄音機等。建議使用支援高採樣率(≥ 24 kHz)錄音的裝置,以滿足音頻要求。

錄音環境

場地

  • 建議在 10 平方米以內的小型封閉空間錄音。

  • 優先選擇配有吸音材料(如吸音棉、地毯、窗帘)的房間。

  • 避免空曠大廳、會議室、教室等高混響場所。

噪音控制

  • 室外噪音:關閉門窗,避免交通、施工等幹擾。

  • 室內噪音:關閉空調、風扇、日光燈鎮流器等裝置;可通過手機錄製環境音並放大播放,識別潛在噪音源。

混響控制

  • 混響會導致聲音模糊、清晰度下降。

  • 減少光滑表面反射:拉上窗帘、開啟衣櫃門、鋪放衣物或床單覆蓋案頭/櫃面。

  • 利用不規則物體(如書架、軟包傢具)實現聲波漫反射。

錄音文案

  • 內容無特殊限制,建議與目標應用情境一致。

  • 避免短句(如"你好"、"是的"),應使用完整句子。

  • 保持語義連貫,朗讀時避免頻繁停頓(建議至少連續 3 秒無中斷)。

  • 錄音全程保持一致的語速,避免開頭或結尾語速過快導致合成時出現卡頓。

  • 可加入適當情緒表達(如溫暖、親切、嚴肅),避免機械朗讀。

  • 不包含禁用語(如政治、色情、暴力相關內容),否則會導致複刻失敗。

操作建議

以普通臥室為例,完成降噪和混響控制後:

  1. 提前熟悉文案,設定角色語氣,自然演繹。

  2. 與錄音裝置保持約 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-Realtimeqwen3-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-Realtimeqwen3-tts-vc-realtime-2026-01-15(最新快照版)、qwen3-tts-vc-realtime-2025-11-27(快照版)

    • Qwen3-TTS-VC:qwen3-tts-vc-2026-01-22(最新快照版)

API 參考

聲音複刻API參考

常見問題

Q:建立音色後可以用於不同的語音合成模型嗎?

不可以。音色在建立時通過target_model綁定到特定的語音合成模型,不能跨模型使用。如果您需要在多個模型上使用同一段音訊聲音,請為每個模型分別建立音色。

Q:複刻音色的有效期間是多久?

Qwen-TTS 和 CosyVoice 建立的音色預設長期有效。若單個音色在過去 1 年內未被用於任何語音合成請求,系統將自動刪除該音色,詳情請參見音色配額與自動清理。建議妥善儲存音色 ID,需要時可通過查詢介面確認音色是否仍然可用。

Q:音頻品質不好會影響複刻效果嗎?

輸入音訊品質直接影響複刻效果。背景雜音、混響、多人聲等問題都會降低複刻音色的相似性和自然度。建議參照音頻要求錄音建議準備樣本。