全部產品
Search
文件中心

Alibaba Cloud Model Studio:CosyVoice聲音複刻API

更新時間:Dec 02, 2025

CosyVoice聲音複刻服務基於產生式語音大模型,使用10~20秒音頻樣本即可產生高度相似且自然的定製聲音,無需傳統訓練過程。聲音複刻與語音合成是前後關聯的兩個步驟。本文檔聚焦於介紹聲音複刻的參數和介面細節,語音合成請參見即時語音合成-CosyVoice/Sambert

重要

本文檔僅適用於“中國大陸(北京)”地區。如需使用模型,需使用“中國大陸(北京)”地區的API Key

使用者指南:關於模型介紹和選型建議請參見即時語音合成-CosyVoice/Sambert

音頻要求

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

專案

要求

支援格式

WAV (16bit), MP3, M4A

音頻時間長度

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

檔案大小

≤ 10 MB

採樣率

≥ 16 kHz

聲道

單聲道 / 雙聲道

內容

音頻必須包含至少5秒連續清晰朗讀(無背景音),其餘部分僅允許短暫停頓(≤2秒);整段音頻應避免背景音樂、噪音或其他人聲,確保核心朗讀內容品質;請使用正常說話音頻作為輸入,不要上傳歌曲或唱歌音頻,以確保複刻效果準確和可用。

語言

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

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

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

快速開始:從複刻到合成

1. 工作流程

聲音複刻與語音合成是緊密關聯的兩個獨立步驟,遵循“先建立,後使用”的流程:

  1. 建立音色

    調用建立音色介面,上傳一段音頻。系統會分析該音頻,建立一個專屬的複刻音色。此步驟必須指定target_model/targetModel,聲明建立的音色將由哪個語音合成模型驅動。

    若已有建立好的音色(調用查詢音色列表介面查看),可跳過這一步直接進行下一步。

  2. 使用音色進行語音合成

    調用語音合成介面,傳入上一步獲得的音色。此步驟指定的語音合成模型必須和上一步的target_model/targetModel一致。

2. 模型配置與準備工作

選擇合適的模型並完成準備工作。

模型配置

聲音複刻時需要指定以下兩個模型:

  • 聲音複刻模型:voice-enrollment

  • 驅動音色的語音合成模型:

    在資源與預算允許的情況下,推薦使用cosyvoice-v3-plus以獲得最佳效果。

    版本

    適用情境

    cosyvoice-v3-plus

    追求最佳音質與表現力,預算充足

    cosyvoice-v3-flash

    平衡效果與成本,綜合性價比高

    cosyvoice-v2

    相容舊版或低要求情境

準備工作

  1. 擷取API Key擷取與配置 API Key,為安全起見,推薦將API Key配置到環境變數。

  2. 安裝SDK:確保已安裝最新版DashScope SDK

  3. 準備音頻URL:將符合音頻要求的音頻檔案上傳至公網可訪問的位置,如阿里雲Object Storage Service,並確保URL可公開訪問。

3. 端到端樣本:從複刻到合成

以下樣本示範了如何在語音合成中使用聲音複刻產生的專屬音色,實現與原音高度相似的輸出效果。

  • 關鍵原則:聲音複刻時,target_model(驅動音色的語音合成模型)必須與後續調用語音合成介面時指定的語音合成模型一致,否則會合成失敗。

  • 注意將樣本中的AUDIO_URL替換為實際的音頻URL。

import os
import time
import dashscope
from dashscope.audio.tts_v2 import VoiceEnrollmentService, SpeechSynthesizer

# 1. 環境準備
# 推薦通過環境變數配置API Key
# export DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
if not dashscope.api_key:
    raise ValueError("DASHSCOPE_API_KEY environment variable not set.")

# 2. 定義複刻參數
TARGET_MODEL = "cosyvoice-v3-plus" 
# 為音色起一個有意義的首碼
VOICE_PREFIX = "myvoice" # 僅允許數字和小寫字母,小於十個字元
# 公網可訪問音頻URL
AUDIO_URL = "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/cosyvoice/cosyvoice-zeroshot-sample.wav" # 樣本URL,請替換為自己的

# 3. 建立音色 (非同步任務)
print("--- Step 1: Creating voice enrollment ---")
service = VoiceEnrollmentService()
try:
    voice_id = service.create_voice(
        target_model=TARGET_MODEL,
        prefix=VOICE_PREFIX,
        url=AUDIO_URL
    )
    print(f"Voice enrollment submitted successfully. Request ID: {service.get_last_request_id()}")
    print(f"Generated Voice ID: {voice_id}")
except Exception as e:
    print(f"Error during voice creation: {e}")
    raise e
# 4. 輪詢查詢音色狀態
print("\n--- Step 2: Polling for voice status ---")
max_attempts = 30
poll_interval = 10 # 秒
for attempt in range(max_attempts):
    try:
        voice_info = service.query_voice(voice_id=voice_id)
        status = voice_info.get("status")
        print(f"Attempt {attempt + 1}/{max_attempts}: Voice status is '{status}'")
        
        if status == "OK":
            print("Voice is ready for synthesis.")
            break
        elif status == "UNDEPLOYED":
            print(f"Voice processing failed with status: {status}. Please check audio quality or contact support.")
            raise RuntimeError(f"Voice processing failed with status: {status}")
        # 對於 "DEPLOYING" 等中間狀態,繼續等待
        time.sleep(poll_interval)
    except Exception as e:
        print(f"Error during status polling: {e}")
        time.sleep(poll_interval)
else:
    print("Polling timed out. The voice is not ready after several attempts.")
    raise RuntimeError("Polling timed out. The voice is not ready after several attempts.")

# 5. 使用複刻音色進行語音合成
print("\n--- Step 3: Synthesizing speech with the new voice ---")
try:
    synthesizer = SpeechSynthesizer(model=TARGET_MODEL, voice=voice_id)
    text_to_synthesize = "恭喜,已成功複刻併合成了屬於自己的聲音!"
    
    # call()方法返回二進位音頻資料
    audio_data = synthesizer.call(text_to_synthesize)
    print(f"Speech synthesis successful. Request ID: {synthesizer.get_last_request_id()}")

    # 6. 儲存音頻檔案
    output_file = "my_custom_voice_output.mp3"
    with open(output_file, "wb") as f:
        f.write(audio_data)
    print(f"Audio saved to {output_file}")

except Exception as e:
    print(f"Error during speech synthesis: {e}")

API參考

使用不同 API 時,請確保使用同一帳號進行操作。

建立音色

上傳用於複刻的音頻,建立自訂音色。

Python SDK

介面說明

def create_voice(self, target_model: str, prefix: str, url: str, language_hints: List[str] = None) -> str:
    '''
    建立一個新的定製音色。
    param: target_model 驅動音色的語音合成模型,必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。
    param: prefix 為音色指定一個便於識別的名稱(僅允許數字、大小寫字母和底線,不超過10個字元)。建議選用與角色、情境相關的標識。該關鍵字會在複刻的音色名中出現,產生的音色名格式為:模型名-首碼-唯一標識,如cosyvoice-v3-plus-myvoice-xxxxxxxx。
    param: url 用於複刻音色的音頻檔案URL,要求公網可訪問。
    param: language_hints 指定目標語言,協助提升合成效果準確性,對英文、法語、德語、日語、韓語、俄語生效(無需填寫中文),當前僅支援選擇一種,取值範圍:en、fr、de、ja、ko、ru。
    return: voice_id 音色ID,可直接用於語音合成介面的voice參數。
    '''
重要
  • target_model:驅動音色的語音合成模型,須和後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗

  • language_hints:僅適用於cosyvoice-v3-flash和cosyvoice-v3-plus模型

請求樣本

from dashscope.audio.tts_v2 import VoiceEnrollmentService

service = VoiceEnrollmentService()

# 避免頻繁調用。每次調用都會建立新音色,達到配額上限後將無法建立。
voice_id = service.create_voice(
    target_model='cosyvoice-v3-plus',
    prefix='myvoice',
    url='https://your-audio-file-url',
    language_hints=['en']
)

print(f"Request ID: {service.get_last_request_id()}")
print(f"Voice ID: {voice_id}")

Java SDK

介面說明

/**
 * 建立一個新的定製音色。
 *
 * @param targetModel 驅動音色的語音合成模型,必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。
 * @param prefix 為音色指定一個便於識別的名稱(僅允許數字、大小寫字母和底線,不超過10個字元)。建議選用與角色、情境相關的標識。該關鍵字會在複刻的音色名中出現,產生的音色名格式為:模型名-首碼-唯一標識,如cosyvoice-v3-plus-myvoice-xxxxxxxx。
 * @param url 用於複刻音色的音頻檔案URL,要求公網可訪問。
 * @param customParam 自訂參數。可在此處指定目標語言(languageHints),協助提升合成效果準確性,對英文、法語、德語、日語、韓語、俄語生效(無需填寫中文),當前僅支援選擇一種,取值範圍:en、fr、de、ja、ko、ru。
 * @return Voice 新建立的音色,通過Voice的getVoiceId方法能夠擷取音色ID,可直接用於語音合成介面的voice參數。
 * @throws NoApiKeyException 如果apikey為空白。
 * @throws InputRequiredException 如果必須參數為空白。
 */
public Voice createVoice(String targetModel, String prefix, String url, VoiceEnrollmentParam customParam) throws NoApiKeyException, InputRequiredException
重要
  • targetModel:驅動音色的語音合成模型,須和後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗

  • languageHints:僅適用於cosyvoice-v3-flash和cosyvoice-v3-plus模型

請求樣本

import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentParam;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Collections;

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        String targetModel = "cosyvoice-v3-plus";
        String prefix = "myvoice";
        String fileUrl = "https://your-audio-file-url";
        String cloneModelName = "voice-enrollment";

        try {
            VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
            Voice myVoice = service.createVoice(
                    targetModel,
                    prefix,
                    fileUrl,
                    VoiceEnrollmentParam.builder()
                    .model(cloneModelName)
                    .languageHints(Collections.singletonList("en")).build());

            logger.info("Voice creation submitted. Request ID: {}", service.getLastRequestId());
            logger.info("Generated Voice ID: {}", myVoice.getVoiceId());
        } catch (Exception e) {
            logger.error("Failed to create voice", e);
        }
    }
}

RESTful API

基本資料

URL

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

要求方法

POST

要求標頭

Authorization: Bearer {api-key} // 需替換為您自己的API Key
Content-Type: application/json

訊息體

包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略:

重要
  • model:聲音複刻模型,固定為voice-enrollment

  • target_model:驅動音色的語音合成模型,須和後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗

  • language_hints:僅適用於cosyvoice-v3-flash和cosyvoice-v3-plus模型

{
    "model": "voice-enrollment",
    "input": {
        "action": "create_voice",
        "target_model": "cosyvoice-v3-plus",
        "prefix": "myvoice",
        "url": "https://yourAudioFileUrl",
        "language_hints": ["en"]
    }
}

請求參數

點擊查看請求樣本

重要
  • model:聲音複刻模型,固定為voice-enrollment

  • target_model:驅動音色的語音合成模型,須和後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗

  • language_hints:僅適用於cosyvoice-v3-flash和cosyvoice-v3-plus模型

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": "voice-enrollment",
    "input": {
        "action": "create_voice",
        "target_model": "cosyvoice-v3-plus",
        "prefix": "myvoice",
        "url": "https://yourAudioFileUrl",
        "language_hints": ["en"]
    }
}'

參數

類型

預設值

是否必須

說明

model

string

-

聲音複刻模型,固定為voice-enrollment

action

string

-

操作類型,固定為create_voice

target_model

string

-

驅動音色的語音合成模型,推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。

必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。

prefix

string

-

為音色指定一個便於識別的名稱(僅允許數字、大小寫字母和底線,不超過10個字元)。建議選用與角色、情境相關的標識。

該關鍵字會在複刻的音色名中出現,產生的音色名格式為:模型名-首碼-唯一標識,如cosyvoice-v3-plus-myvoice-xxxxxxxx

url

string

-

用於複刻音色的音頻檔案URL,要求公網可訪問。

language_hints

array[string]

-

指定目標語言,協助提升合成效果準確性,對英文、法語、德語、日語、韓語、俄語生效(無需填寫中文),當前僅支援選擇一種。

該參數僅適用於cosyvoice-v3-flash和cosyvoice-v3-plus模型。

取值範圍:

  • en:英文

  • fr:法語

  • de:德語

  • ja:日語

  • ko:韓語

  • ru:俄語

響應參數

點擊查看響應樣本

{
    "output": {
        "voice_id": "yourVoiceId"
    },
    "usage": {
        "count": 1
    },
    "request_id": "yourRequestId"
}

參數

類型

說明

voice_id

string

音色ID,可直接用於語音合成介面的voice參數。

查詢音色列表

分頁查詢已建立的音色列表。

Python SDK

介面說明

def list_voices(self, prefix=None, page_index: int = 0, page_size: int = 10) -> List[dict]:
    '''
    查詢已建立的所有音色
    param: prefix 音色自訂首碼,僅允許數字和小寫字母,長度小於10個字元。
    param: page_index 查詢的頁索引
    param: page_size 查詢頁大小
    return: List[dict] 音色列表,包含每個音色的id,建立時間,修改時間,狀態。格式為:[{'gmt_create': '2025-10-09 14:51:01', 'gmt_modified': '2025-10-09 14:51:07', 'status': 'OK', 'voice_id': 'cosyvoice-v3-myvoice-xxx'}]
    音色狀態有三種:
        DEPLOYING: 審核中
        OK:審核通過,可調用
        UNDEPLOYED:審核不通過,不可調用
    '''

請求樣本

from dashscope.audio.tts_v2 import VoiceEnrollmentService

service = VoiceEnrollmentService()

# 按首碼篩選,或設為None查詢所有
voices = service.list_voices(prefix='myvoice', page_index=0, page_size=10)

print(f"Request ID: {service.get_last_request_id()}")
print(f"Found voices: {voices}")

響應樣本

[
    {
        "gmt_create": "2024-09-13 11:29:41",
        "voice_id": "yourVoiceId",
        "gmt_modified": "2024-09-13 11:29:41",
        "status": "OK"
    },
    {
        "gmt_create": "2024-09-13 13:22:38",
        "voice_id": "yourVoiceId",
        "gmt_modified": "2024-09-13 13:22:38",
        "status": "OK"
    }
]

響應參數

參數

類型

說明

voice_id

string

音色ID。

gmt_create

string

建立音色的時間。

gmt_modified

string

修改音色的時間。

status

string

音色狀態:

  • DEPLOYING: 審核中

  • OK:審核通過,可調用

  • UNDEPLOYED:審核不通過,不可調用

Java SDK

介面說明

// 音色狀態有三種:
//        DEPLOYING: 審核中
//        OK:審核通過,可調用
//        UNDEPLOYED:審核不通過,不可調用
/**
 * 查詢已建立的所有音色 預設的頁索引為0,預設的頁大小為10
 *
 * @param prefix 音色自訂首碼,僅允許數字和小寫字母,長度小於10個字元。可以為null。
 * @return Voice[] 音色對象數組。Voice封裝了音色的id,建立時間,修改時間,狀態。
 * @throws NoApiKeyException 如果apikey為空白。
 * @throws InputRequiredException 如果必須參數為空白。
 */
public Voice[] listVoice(String prefix) throws NoApiKeyException, InputRequiredException 

/**
 * 查詢已建立的所有音色
 *
 * @param prefix 音色自訂首碼,僅允許數字和小寫字母,長度小於10個字元。
 * @param pageIndex 查詢的頁索引。
 * @param pageSize 查詢的頁大小。
 * @return Voice[] 音色對象數組。Voice封裝了音色的id,建立時間,修改時間,狀態。
 * @throws NoApiKeyException 如果apikey為空白。
 * @throws InputRequiredException 如果必須參數為空白。
 */
public Voice[] listVoice(String prefix, int pageIndex, int pageSize) throws NoApiKeyException, InputRequiredException

請求樣本

需要引入第三方庫com.google.gson.Gson

import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");  // 如果您沒有配置環境變數,請在此處用您的API-KEY進行替換
    private static String prefix = "myvoice"; // 請按實際情況進行替換
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        // 查詢音色
        Voice[] voices = service.listVoice(prefix, 0, 10);
        logger.info("List successful. Request ID: {}", service.getLastRequestId());
        logger.info("Voices Details: {}", new Gson().toJson(voices));
    }
}

響應樣本

[
    {
        "gmt_create": "2024-09-13 11:29:41",
        "voice_id": "yourVoiceId",
        "gmt_modified": "2024-09-13 11:29:41",
        "status": "OK"
    },
    {
        "gmt_create": "2024-09-13 13:22:38",
        "voice_id": "yourVoiceId",
        "gmt_modified": "2024-09-13 13:22:38",
        "status": "OK"
    }
]

響應參數

參數

類型

說明

voice_id

string

音色ID。

gmt_create

string

建立音色的時間。

gmt_modified

string

修改音色的時間。

status

string

音色狀態:

  • DEPLOYING: 審核中

  • OK:審核通過,可調用

  • UNDEPLOYED:審核不通過,不可調用

RESTful API

基本資料

URL

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

要求方法

POST

要求標頭

Authorization: Bearer {api-key} // 需替換為您自己的API Key
Content-Type: application/json

訊息體

包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略:

重要

model為聲音複刻模型,固定為voice-enrollment

{
    "model": "voice-enrollment",
    "input": {
        "action": "list_voice",
        "prefix": "myvoice",
        "page_index": 0,
        "page_size": 10
    }
}

請求參數

點擊查看請求樣本

重要

model為聲音複刻模型,固定為voice-enrollment

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": "voice-enrollment",
    "input": {
        "action": "list_voice",
        "prefix": "myvoice",
        "page_index": 0,
        "page_size": 10
    }
}'

參數

類型

預設值

是否必須

說明

model

string

-

聲音複刻模型,固定為voice-enrollment

action

string

-

操作類型,固定為list_voice

prefix

string

null

音色自訂首碼,僅允許數字和小寫字母,長度小於10個字元。

page_index

integer

0

頁碼索引,從0開始計數。

page_size

integer

10

每頁包含資料條數。

響應參數

點擊查看響應樣本

{
    "output": {
        "voice_list": [
            {
                "gmt_create": "2024-12-11 13:38:02",
                "voice_id": "yourVoiceId",
                "gmt_modified": "2024-12-11 13:38:02",
                "status": "OK"
            }
        ]
    },
    "usage": {
        "count": 1
    },
    "request_id": "yourRequestId"
}

參數

類型

說明

voice_id

string

音色ID。

gmt_create

string

建立音色的時間。

gmt_modified

string

修改音色的時間。

status

string

音色狀態:

  • DEPLOYING: 審核中

  • OK:審核通過,可調用

  • UNDEPLOYED:審核不通過,不可調用

查詢指定音色

擷取特定音色的詳細資料

Python SDK

介面說明

def query_voice(self, voice_id: str) -> List[str]:
    '''
    查詢指定音色的詳細資料
    param: voice_id 需要查詢的音色ID
    return: List[str] 音色詳細資料,包含狀態、建立時間、音頻連結等
    '''

請求樣本

from dashscope.audio.tts_v2 import VoiceEnrollmentService

service = VoiceEnrollmentService()
voice_id = 'cosyvoice-v3-plus-myvoice-xxxxxxxx'

voice_details = service.query_voice(voice_id=voice_id)

print(f"Request ID: {service.get_last_request_id()}")
print(f"Voice Details: {voice_details}")

響應樣本

{
    "gmt_create": "2024-09-13 11:29:41",
    "resource_link": "https://yourAudioFileUrl",
    "target_model": "cosyvoice-v3-plus",
    "gmt_modified": "2024-09-13 11:29:41",
    "status": "OK"
}

響應參數

參數

類型

說明

resource_link

string

被複刻的音訊URL。

target_model

string

驅動音色的語音合成模型,推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。

必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。

gmt_create

string

建立音色的時間。

gmt_modified

string

修改音色的時間。

status

string

音色狀態:

  • DEPLOYING: 審核中

  • OK:審核通過,可調用

  • UNDEPLOYED:審核不通過,不可調用

Java SDK

介面說明

/**
 * 查詢指定音色的詳細資料
 *
 * @param voiceId 需要查詢的音色ID
 * @return Voice 音色詳細資料,包含狀態、建立時間、音頻連結等
 * @throws NoApiKeyException 如果apikey為空白
 * @throws InputRequiredException 如果必須參數為空白
 */
public Voice queryVoice(String voiceId) throws NoApiKeyException, InputRequiredException

請求樣本

需要引入第三方庫com.google.gson.Gson

import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");  // 如果您沒有配置環境變數,請在此處用您的API-KEY進行替換
    private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // 請按實際情況進行替換
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        Voice voice = service.queryVoice(voiceId);
        
        logger.info("Query successful. Request ID: {}", service.getLastRequestId());
        logger.info("Voice Details: {}", new Gson().toJson(voice));
    }
}

響應樣本

{
    "gmt_create": "2024-09-13 11:29:41",
    "resource_link": "https://yourAudioFileUrl",
    "target_model": "cosyvoice-v3-plus",
    "gmt_modified": "2024-09-13 11:29:41",
    "status": "OK"
}

響應參數

參數

類型

說明

resource_link

string

被複刻的音訊URL。

target_model

string

驅動音色的語音合成模型,推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。

必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。

gmt_create

string

建立音色的時間。

gmt_modified

string

修改音色的時間。

status

string

音色狀態:

  • DEPLOYING: 審核中

  • OK:審核通過,可調用

  • UNDEPLOYED:審核不通過,不可調用

RESTful API

基本資料

URL

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

要求方法

POST

要求標頭

Authorization: Bearer {api-key} // 需替換為您自己的API Key
Content-Type: application/json

訊息體

包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略:

重要

model為聲音複刻模型,固定為voice-enrollment

{
    "model": "voice-enrollment",
    "input": {
        "action": "query_voice",
        "voice_id": "yourVoiceId"
    }
}

請求參數

點擊查看請求樣本

重要

model為聲音複刻模型,固定為voice-enrollment

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": "voice-enrollment",
    "input": {
        "action": "query_voice",
        "voice_id": "yourVoiceId"
    }
}'

參數

類型

預設值

是否必須

說明

model

string

-

聲音複刻模型,固定為voice-enrollment

action

string

-

操作類型,固定為query_voice

voice_id

string

-

需要查詢的音色ID。

響應參數

點擊查看響應樣本

{
    "output": {
        "gmt_create": "2024-12-11 13:38:02",
        "resource_link": "https://yourAudioFileUrl",
        "target_model": "cosyvoice-v3-plus",
        "gmt_modified": "2024-12-11 13:38:02",
        "status": "OK"
    },
    "usage": {
        "count": 1
    },
    "request_id": "2450f969-d9ea-9483-bafc-************"
}

參數

類型

說明

resource_link

string

被複刻的音訊URL。

target_model

string

驅動音色的語音合成模型,推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。

必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。

gmt_create

string

建立音色的時間。

gmt_modified

string

修改音色的時間。

status

string

音色狀態:

  • DEPLOYING: 審核中

  • OK:審核通過,可調用

  • UNDEPLOYED:審核不通過,不可調用

更新音色

使用新的音頻檔案更新一個已存在的音色。

Python SDK

介面說明

def update_voice(self, voice_id: str, url: str) -> None:
    '''
    更新音色
    param: voice_id 音色id
    param: url 用於聲音複刻的音頻檔案url
    '''

請求樣本

from dashscope.audio.tts_v2 import VoiceEnrollmentService

service = VoiceEnrollmentService()
service.update_voice(
    voice_id='cosyvoice-v3-plus-myvoice-xxxxxxxx',
    url='https://your-new-audio-file-url'
)
print(f"Update submitted. Request ID: {service.get_last_request_id()}")

Java SDK

介面說明

/**
 * 更新音色
 *
 * @param voiceId 需要更新的音色
 * @param url 用於聲音複刻的音頻檔案url
 * @throws NoApiKeyException 如果apikey為空白
 * @throws InputRequiredException 如果必須參數為空白
 */
public void updateVoice(String voiceId, String url)
    throws NoApiKeyException, InputRequiredException

請求樣本

import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");  // 如果您沒有配置環境變數,請在此處用您的API-KEY進行替換
    private static String fileUrl = "https://your-audio-file-url";  // 請按實際情況進行替換
    private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // 請按實際情況進行替換
    private static final Logger logger = LoggerFactory.getLogger(Main.class);
    
    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        // 更新音色
        service.updateVoice(voiceId, fileUrl);
        logger.info("Update submitted. Request ID: {}", service.getLastRequestId());
    }
}

RESTful API

基本資料

URL

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

要求方法

POST

要求標頭

Authorization: Bearer {api-key} // 需替換為您自己的API Key
Content-Type: application/json

訊息體

包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略:

重要

model為聲音複刻模型,固定為voice-enrollment

{
    "model": "voice-enrollment",
    "input": {
        "action": "update_voice",
        "voice_id": "yourVoiceId",
        "url": "https://yourAudioFileUrl"
    }
}

請求參數

點擊查看請求樣本

重要

model為聲音複刻模型,固定為voice-enrollment

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": "voice-enrollment",
    "input": {
        "action": "update_voice",
        "voice_id": "yourVoiceId",
        "url": "https://yourAudioFileUrl"
    }
}'

參數

類型

預設值

是否必須

說明

model

string

-

聲音複刻模型,固定為voice-enrollment

action

string

-

操作類型,固定為update_voice

voice_id

string

-

待更新的音色ID。

url

string

-

用於更新音色的音頻檔案URL。該URL要求公網可訪問。

如何錄製音頻請參見錄音操作指南

點擊查看響應樣本

{
    "output": {},
    "usage": {
        "count": 1
    },
    "request_id": "yourRequestId"
}

刪除音色

刪除一個不再需要的音色以釋放配額。此操作無法復原。

Python SDK

介面說明

def delete_voice(self, voice_id: str) -> None:
    '''
    刪除音色
    param: voice_id 需要刪除的音色
    '''

請求樣本

from dashscope.audio.tts_v2 import VoiceEnrollmentService

service = VoiceEnrollmentService()
service.delete_voice(voice_id='cosyvoice-v3-plus-myvoice-xxxxxxxx')
print(f"Deletion submitted. Request ID: {service.get_last_request_id()}")

Java SDK

介面說明

/**
 * 刪除音色
 *
 * @param voiceId 需要刪除的音色
 * @throws NoApiKeyException 如果apikey為空白
 * @throws InputRequiredException 如果必須參數為空白
 */
public void deleteVoice(String voiceId) throws NoApiKeyException, InputRequiredException 

請求樣本

import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");  // 如果您沒有配置環境變數,請在此處用您的API-KEY進行替換
    private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // 請按實際情況進行替換
    private static final Logger logger = LoggerFactory.getLogger(Main.class);
    
    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        // 刪除音色
        service.deleteVoice(voiceId);
        logger.info("Deletion submitted. Request ID: {}", service.getLastRequestId());
    }
}

RESTful API

基本資料

URL

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

要求方法

POST

要求標頭

Authorization: Bearer {api-key} // 需替換為您自己的API Key
Content-Type: application/json

訊息體

包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略:

重要

model為聲音複刻模型,固定為voice-enrollment

{
    "model": "voice-enrollment",
    "input": {
        "action": "delete_voice",
        "voice_id": "yourVoiceId"
    }
}

請求參數

點擊查看請求樣本

重要

model為聲音複刻模型,固定為voice-enrollment

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": "voice-enrollment",
    "input": {
        "action": "delete_voice",
        "voice_id": "yourVoiceId"
    }
}'

參數

類型

預設值

是否必須

說明

model

string

-

聲音複刻模型,固定為voice-enrollment

action

string

-

操作類型,固定為delete_voice

voice_id

string

-

待刪除的音色ID。

點擊查看響應樣本

{
    "output": {},
    "usage": {
        "count": 1
    },
    "request_id": "yourRequestId"
}

音色配額與自動清理規則

  • 總數限制:1000個音色/帳號

    當前介面不提供音色數量查詢功能,可通過調用查詢音色列表介面自行統計音色數目
  • 自動清理:若單個音色在過去一年內未被用於任何語音合成請求,系統將自動將其刪除

計費說明

  • 聲音複刻:建立、查詢、更新、刪除音色免費

  • 使用複刻產生的專屬音色進行語音合成:按量(文本字元數)計費,參見即時語音合成-CosyVoice/Sambert

著作權與合法性

您需對所提供聲音的所有權及合法使用權負責,請注意閱讀服務合約

錯誤碼

如遇報錯問題,請參見錯誤資訊進行排查。

常見問題

功能特性

Q:如何調節自訂音色的語速、音量

與使用預置音色完全相同。在調用語音合成API時,傳入相應的參數即可,例如 speech_rate (Python) / speechRate (Java) 用於調節語速,volume 用於調節音量。詳情請參見語音合成API文檔(Java SDK/Python SDK/WebSocket API

Q:除了Java和Python,其他語言(如Go, C#, Node.js)如何調用?

對於音色管理,請直接使用文檔中提供的RESTful API。對於語音合成,請使用WebSocket API,並將複刻得到的 voice_id 作為 voice 參數傳入。

故障排查

如遇代碼報錯問題,請根據錯誤碼中的資訊進行排查。

Q:為什麼找不到 VoiceEnrollmentService 類?

SDK版本過低。請安裝最新版SDK

Q:聲音複刻效果不佳,有雜音或不清晰怎麼辦

這通常是由於輸入音頻品質不高導致的。請嚴格遵循錄音操作指南重新錄製並上傳音頻。