CosyVoice聲音複刻服務基於產生式語音大模型,使用10~20秒音頻樣本即可產生高度相似且自然的定製聲音,無需傳統訓練過程。聲音複刻與語音合成是前後關聯的兩個步驟。本文檔聚焦於介紹聲音複刻的參數和介面細節,語音合成請參見即時語音合成-CosyVoice/Sambert。
本文檔僅適用於“中國大陸(北京)”地區。如需使用模型,需使用“中國大陸(北京)”地區的API Key。
使用者指南:關於模型介紹和選型建議請參見即時語音合成-CosyVoice/Sambert。
音頻要求
高品質的輸入音頻是獲得優質複刻效果的基礎。
專案 | 要求 |
支援格式 | WAV (16bit), MP3, M4A |
音頻時間長度 | 推薦10~20秒,最長不得超過60秒 |
檔案大小 | ≤ 10 MB |
採樣率 | ≥ 16 kHz |
聲道 | 單聲道 / 雙聲道 |
內容 | 音頻必須包含至少5秒連續清晰朗讀(無背景音),其餘部分僅允許短暫停頓(≤2秒);整段音頻應避免背景音樂、噪音或其他人聲,確保核心朗讀內容品質;請使用正常說話音頻作為輸入,不要上傳歌曲或唱歌音頻,以確保複刻效果準確和可用。 |
語言 | 因驅動音色的語音合成模型(通過
|
快速開始:從複刻到合成
1. 工作流程
聲音複刻與語音合成是緊密關聯的兩個獨立步驟,遵循“先建立,後使用”的流程:
2. 模型配置與準備工作
選擇合適的模型並完成準備工作。
模型配置
聲音複刻時需要指定以下兩個模型:
聲音複刻模型:voice-enrollment
驅動音色的語音合成模型:
在資源與預算允許的情況下,推薦使用
cosyvoice-v3-plus以獲得最佳效果。版本
適用情境
cosyvoice-v3-plus
追求最佳音質與表現力,預算充足
cosyvoice-v3-flash
平衡效果與成本,綜合性價比高
cosyvoice-v2
相容舊版或低要求情境
準備工作
擷取API Key:擷取與配置 API Key,為安全起見,推薦將API Key配置到環境變數。
安裝SDK:確保已安裝最新版DashScope SDK。
準備音頻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, InputRequiredExceptiontargetModel:驅動音色的語音合成模型,須和後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗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 | |
要求方法 | POST |
要求標頭 | |
訊息體 | 包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略: 重要
|
請求參數
參數 | 類型 | 預設值 | 是否必須 | 說明 |
model | string | - | 是 | 聲音複刻模型,固定為 |
action | string | - | 是 | 操作類型,固定為 |
target_model | string | - | 是 | 驅動音色的語音合成模型,推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。 必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。 |
prefix | string | - | 是 | 為音色指定一個便於識別的名稱(僅允許數字、大小寫字母和底線,不超過10個字元)。建議選用與角色、情境相關的標識。 該關鍵字會在複刻的音色名中出現,產生的音色名格式為: |
url | string | - | 是 | 用於複刻音色的音頻檔案URL,要求公網可訪問。 |
language_hints | array[string] | - | 否 | 指定目標語言,協助提升合成效果準確性,對英文、法語、德語、日語、韓語、俄語生效(無需填寫中文),當前僅支援選擇一種。 該參數僅適用於cosyvoice-v3-flash和cosyvoice-v3-plus模型。 取值範圍:
|
響應參數
參數 | 類型 | 說明 |
voice_id | string | 音色ID,可直接用於語音合成介面的 |
查詢音色列表
分頁查詢已建立的音色列表。
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 | 音色狀態:
|
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 | 音色狀態:
|
RESTful API
基本資料
URL | |
要求方法 | POST |
要求標頭 | |
訊息體 | 包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略: 重要
|
請求參數
參數 | 類型 | 預設值 | 是否必須 | 說明 |
model | string | - | 是 | 聲音複刻模型,固定為 |
action | string | - | 是 | 操作類型,固定為 |
prefix | string | null | 否 | 音色自訂首碼,僅允許數字和小寫字母,長度小於10個字元。 |
page_index | integer | 0 | 否 | 頁碼索引,從0開始計數。 |
page_size | integer | 10 | 否 | 每頁包含資料條數。 |
響應參數
參數 | 類型 | 說明 |
voice_id | string | 音色ID。 |
gmt_create | string | 建立音色的時間。 |
gmt_modified | string | 修改音色的時間。 |
status | string | 音色狀態:
|
查詢指定音色
擷取特定音色的詳細資料
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 | 音色狀態:
|
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 | 音色狀態:
|
RESTful API
基本資料
URL | |
要求方法 | POST |
要求標頭 | |
訊息體 | 包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略: 重要
|
請求參數
參數 | 類型 | 預設值 | 是否必須 | 說明 |
model | string | - | 是 | 聲音複刻模型,固定為 |
action | string | - | 是 | 操作類型,固定為 |
voice_id | string | - | 是 | 需要查詢的音色ID。 |
響應參數
參數 | 類型 | 說明 |
resource_link | string | 被複刻的音訊URL。 |
target_model | string | 驅動音色的語音合成模型,推薦 cosyvoice-v3-flash 或 cosyvoice-v3-plus。 必須與後續調用語音合成介面時使用的語音合成模型一致,否則合成會失敗。 |
gmt_create | string | 建立音色的時間。 |
gmt_modified | string | 修改音色的時間。 |
status | string | 音色狀態:
|
更新音色
使用新的音頻檔案更新一個已存在的音色。
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 | |
要求方法 | POST |
要求標頭 | |
訊息體 | 包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略: 重要
|
請求參數
參數 | 類型 | 預設值 | 是否必須 | 說明 |
model | string | - | 是 | 聲音複刻模型,固定為 |
action | string | - | 是 | 操作類型,固定為 |
voice_id | string | - | 是 | 待更新的音色ID。 |
url | string | - | 是 | 用於更新音色的音頻檔案URL。該URL要求公網可訪問。 如何錄製音頻請參見錄音操作指南。 |
刪除音色
刪除一個不再需要的音色以釋放配額。此操作無法復原。
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 | |
要求方法 | POST |
要求標頭 | |
訊息體 | 包含所有請求參數的訊息體如下,對於可選欄位,在實際業務中可根據需求省略: 重要
|
請求參數
參數 | 類型 | 預設值 | 是否必須 | 說明 |
model | string | - | 是 | 聲音複刻模型,固定為 |
action | string | - | 是 | 操作類型,固定為 |
voice_id | string | - | 是 | 待刪除的音色ID。 |
音色配額與自動清理規則
總數限制: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:聲音複刻效果不佳,有雜音或不清晰怎麼辦?
這通常是由於輸入音頻品質不高導致的。請嚴格遵循錄音操作指南重新錄製並上傳音頻。