API接口详情

更新时间:2025-04-25 02:36:36

CosyVoice声音复刻服务依托先进的大模型技术进行特征提取,无需训练过程就可以完成声音的复刻。仅需提供10~20秒的音频,即可迅速生成高度相似且听感自然的定制声音。本文将详细介绍CosyVoice声音复刻服务的使用方法和操作流程,帮助您快速实现声音复刻。

说明

声音复刻服务已于2025424日支持 cosyvoice-v2 版本,相比于 cosyvoice-v1 具有更好的复刻效果。

v1 版模型的复刻服务会继续支持,此前使用 cosyvoice-v1 复刻的音色可以正常使用。

您也可以使用原始音频调用 cosyvoice-v2 作为target_model/targetModel 重新复刻,以获得更好的复刻效果。

应用场景

  • 陪伴场景:通过复刻家人的声音提供个性化陪伴。可用于智能助手和车载导航语音,以及家庭娱乐项目,例如,为家人朗读绘本、控制家用电器或提供教育辅导。

  • 教育场景:复刻老师的声音,加强师生互动,丰富教学视频和课件的内容,打造更亲切、更生动的学习体验。

  • 音视频产业:复刻主播的声音,以便于后期的补录和配音等,从而提高音视频的制作效率。

  • 智能客服:通过复刻客户经理的声音,提供语音服务,包括但不限于客户回访和市场营销电话,以增强服务的个性化和人性化特征。

产品优势

  • 低样本音频要求:仅需短短10~20秒的录音便能完成声音复刻,显著降低了录制成本,提升了效率。

  • 高度拟真:利用阿里通义语音实验室自研的CosyVoice生成式神经网络语音大模型算法,结合前沿的零样本学习技术,能够在语调、韵律以及情感表达上高度还原真人声音,很难与真实录音相辨。

  • 即时合成:秒级还原真实音色,提供高效、实时的声音复刻服务。

支持的模型

声音复刻服务支持 cosyvoice-v1 和 cosyvoice-v2 模型。

支持的语言

中文和英文。

注意事项

使用CosyVoice声音复刻服务请注意以下事项:

  • 音频文件格式要求:

    • 声道数:单/双声道

    • 采样率:大于等于 16000 Hz

    • 格式:WAV(16bit)、MP3、M4A

    • 文件大小:10MB 以内

    • 音频时长:10~20秒,不建议超过60秒。在朗读时请保持连贯,至少包含一段超过5秒的连续语音。

  • 声音复刻数量限制:每个阿里云主账号最多可复刻1000个音色(cosyvoice-v1 和 cosyvoice-v2共享该限额),复刻完成的音色支持删除,删除后将不再占用复刻额度。若您的需求超过此限额,请提前与我们的售前团队联系沟通或加入开发者群。超过1年未使用的声音将下线处理。

  • 版权与合法性:您需对所提供声音的所有权及合法使用权负责,请注意阅读服务协议

  • 复刻后音色的使用:使用声音复刻服务生成的音色(voice_id/voiceId)与音色列表中官方默认提供的音色(例如:longxiaoxia)的使用方法相同。

  • 服务调用方式:声音复刻服务当前仅支持API方式调用。

计费说明

声音复刻服务免费提供,但使用复刻的音色进行语音合成时将收取费用,计费详情请参见CosyVoice

前提条件

API详情

使用不同 API 时,请确保使用同一账号进行操作。

创建音色

每个阿里云主账号最多可同时保留1000个复刻音色,超出额度后将无法创建新音色(参见声音复刻数量限制)。

创建音色所用音频文件需满足音频文件格式要求,否则将无法创建音色。

Python
Java
RESTful

通过VoiceEnrollmentService类的create_voice方法复刻音色。VoiceEnrollmentService类的引入方式:from dashscope.audio.tts_v2 import VoiceEnrollmentService

create_voice方法返回音色ID。该ID可用于CosyVoice语音合成,作为音色使用。

def create_voice(self, target_model: str, prefix: str, url: str) -> str:
    '''
    创建音色
    param: target_model 声音复刻所使用的模型,支持cosyvoice-v1和cosyvoice-v2。
    param: prefix 音色自定义前缀,仅允许数字和小写字母,小于十个字符。
    param: url 用于复刻音色的音频文件URL。该URL要求公网可访问。
    return: voice_id
    '''

通过VoiceEnrollmentService类的createVoice方法复刻音色。VoiceEnrollmentService类的引入方式:import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;

createVoice返回的Voice类的getVoiceId方法可以获取音色ID。该ID可用于CosyVoice语音合成,作为音色使用。

/**
 * 创建音色
 *
 * @param targetModel 声音复刻所使用的模型,支持cosyvoice-v1和cosyvoice-v2。
 * @param prefix 音色自定义前缀,仅允许数字和小写字母,小于十个字符。
 * @param url 用于复刻音色的音频文件URL。该URL要求公网可访问。
 * @return Voice 音色对象
 * @throws NoApiKeyException 如果apikey为空
 * @throws InputRequiredException 如果必须参数为空
 */
public Voice createVoice(String targetModel, String prefix, String url) throws NoApiKeyException, InputRequiredException

基本信息

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",
    "input": {
        "action": "create_voice",
        "target_model": "cosyvoice-v2",
        "prefix": "testpfx",
        "url": "https://yourAudioFileUrl"
    }
}

请求参数

点击查看请求示例

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-v1",
        "prefix": "testpfx",
        "url": "https://yourAudioFileUrl"
    }
}'

参数

类型

默认值

是否必须

说明

model

string

-

固定为voice-enrollment

action

string

-

固定为create_voice

target_model

string

-

声音复刻所使用的模型,支持cosyvoice-v1cosyvoice-v2。

prefix

string

-

音色自定义前缀,仅允许数字和小写字母,小于十个字符。

url

string

-

用于复刻音色的音频文件URL。该URL要求公网可访问。

如何录制音频请参见录音操作指南

响应参数

点击查看响应示例

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

参数

类型

说明

voice_id

string

音色ID。该ID可用于CosyVoice语音合成,作为音色使用。

查询所有音色

Python
Java
RESTful

通过VoiceEnrollmentService类的list_voices方法查询所有音色。VoiceEnrollmentService类的引入方式:from dashscope.audio.tts_v2 import VoiceEnrollmentService

音色状态有两种:

  • UNDEPLOYED:不可调用

  • OK:可调用

def list_voices(self, prefix=None, page_index: int = 0, page_size: int = 10) -> List[dict]:
    '''
    查询已创建的所有音色
    param: prefix 音色前缀,设置为None则返回所有音色
    param: page_index 查询的页索引
    param: page_size 查询页大小
    return: List[dict] 音色列表,包含每个音色的id,创建时间,修改时间,状态。
    '''

响应示例:

[
    {
        "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。该ID可用于CosyVoice语音合成,作为音色使用。

gmt_create

string

创建音色的时间。

gmt_modified

string

修改音色的时间。

status

string

状态。

  • OK:可调用。

  • UNDEPLOYED:不可调用

通过VoiceEnrollmentService类的listVoice方法查询所有音色。VoiceEnrollmentService类的引入方式:import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;

音色状态有两种:

  • UNDEPLOYED:不可调用

  • OK:可调用

/**
 * 查询已创建的所有音色 默认的页索引为0,默认的页大小为10
 *
 * @param prefix 音色自定义前缀,仅允许数字和小写字母,小于十个字符。可以为null。
 * @return Voice[] 音色对象数组
 * @throws NoApiKeyException 如果apikey为空
 * @throws InputRequiredException 如果必须参数为空
 */
public Voice[] listVoice(String prefix) throws NoApiKeyException, InputRequiredException 

/**
 * 查询已创建的所有音色
 *
 * @param prefix 音色自定义前缀,仅允许数字和小写字母,小于十个字符。
 * @param pageIndex 查询的页索引
 * @param pageSize 查询的页大小
 * @return Voice[] 音色对象数组
 * @throws NoApiKeyException 如果apikey为空
 * @throws InputRequiredException 如果必须参数为空
 */
public Voice[] listVoice(String prefix, int pageIndex, int pageSize) throws NoApiKeyException, InputRequiredException

响应示例:

[
    {
        "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。该ID可用于CosyVoice语音合成,作为音色使用。

gmt_create

string

创建音色的时间。

gmt_modified

string

修改音色的时间。

status

string

状态。

  • OK:可调用。

  • UNDEPLOYED:不可调用

基本信息

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

请求参数

点击查看请求示例

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": "testpfx",
        "page_index": 0,
        "page_size": 10
    }
}'

参数

类型

默认值

是否必须

说明

model

string

-

固定为voice-enrollment

action

string

-

固定为list_voice

prefix

string

null

音色自定义前缀,仅允许数字和小写字母,小于十个字符。

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。该ID可用于CosyVoice语音合成,作为音色使用。

gmt_create

string

创建音色的时间。

gmt_modified

string

修改音色的时间。

status

string

状态。

  • OK:可调用。

  • UNDEPLOYED:不可调用

查询指定音色

Python
Java
RESTful

通过VoiceEnrollmentService类的query_voices方法查询指定音色。VoiceEnrollmentService类的引入方式:from dashscope.audio.tts_v2 import VoiceEnrollmentService

def query_voices(self, voice_id: str) -> List[str]:
    '''
    查询已创建的所有音色
    param: voice_id 需要查询的音色
    return: bytes 注册音色使用的音频
    '''

响应示例:

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

响应参数:

参数

类型

说明

resource_link

string

被复刻的音频的URL。

target_model

string

声音复刻所使用的模型。

gmt_create

string

创建音色的时间。

gmt_modified

string

修改音色的时间。

status

string

状态。

  • OK:可调用。

  • UNDEPLOYED:不可调用

通过VoiceEnrollmentService类的queryVoice方法查询指定音色。VoiceEnrollmentService类的引入方式:import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;

/**
 * 查询指定音色
 *
 * @param voiceId 需要查询的音色
 * @return Voice 音色对象,包含状态信息和用于声音复刻的音频文件url
 * @throws NoApiKeyException 如果apikey为空
 * @throws InputRequiredException 如果必须参数为空
 */
public Voice queryVoice(String voiceId) throws NoApiKeyException, InputRequiredException

响应示例:

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

响应参数:

参数

类型

说明

resource_link

string

被复刻的音频的URL。

target_model

string

声音复刻所使用的模型。

gmt_create

string

创建音色的时间。

gmt_modified

string

修改音色的时间。

status

string

状态。

  • OK:可调用。

  • UNDEPLOYED:不可调用

基本信息

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

请求参数

点击查看请求示例

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-v1",
        "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

声音复刻所使用的模型。

gmt_create

string

创建音色的时间。

gmt_modified

string

修改音色的时间。

status

string

状态。

  • OK:可调用。

  • UNDEPLOYED:不可调用

更新音色

Python
Java
RESTful

通过VoiceEnrollmentService类的update_voice方法更新音色。VoiceEnrollmentService类的引入方式:from dashscope.audio.tts_v2 import VoiceEnrollmentService

def update_voice(self, voice_id: str, url: str) -> None:
    '''
    更新音色
    param: voice_id 音色id
    param: url 用于声音复刻的音频文件url
    '''

通过VoiceEnrollmentService类的updateVoice方法更新音色。VoiceEnrollmentService类的引入方式:import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;

/**
 * 更新音色
 *
 * @param voiceId 需要更新的音色
 * @param url 用于声音复刻的音频文件url
 * @throws NoApiKeyException 如果apikey为空
 * @throws InputRequiredException 如果必须参数为空
 */
public void updateVoice(String voiceId, String url)
    throws NoApiKeyException, InputRequiredException

基本信息

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

请求参数

点击查看请求示例

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
Java
RESTful

通过VoiceEnrollmentService类的delete_voice方法删除音色。VoiceEnrollmentService类的引入方式:from dashscope.audio.tts_v2 import VoiceEnrollmentService

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

通过VoiceEnrollmentService类的deleteVoice方法删除音色。VoiceEnrollmentService类的引入方式:import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;

/**
 * 删除音色
 *
 * @param voiceId 需要删除的音色
 * @throws NoApiKeyException 如果apikey为空
 * @throws InputRequiredException 如果必须参数为空
 */
public void deleteVoice(String voiceId) throws NoApiKeyException, InputRequiredException 

基本信息

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

请求参数

点击查看请求示例

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"
}

使用复刻的音色进行语音合成

本文档提供音色管理接口的功能说明,支持音色的创建、查询、更新与删除操作。若需在语音合成中调用已复刻的音色,请按以下步骤操作(请确保声音复刻与语音合成使用同一账号):

声音复刻与语音合成服务均提供 Java 和 Python SDK 支持。对于其他编程语言(如 Go、C#、PHP、Node.js等),声音复刻需调用 RESTful API,语音合成功能则需使用 WebSocket API。
  1. 调用声音复刻API并获取音色ID

    调用创建音色查询所有音色接口,获取音色ID(根据编程语言选择合适的接口。对于JavaPython以外的其他编程语言,如 Go、C#、PHP、Node.js 等,请使用RESTful接口)。

  2. 使用复刻的音色进行语音合成

    请根据您所使用的编程语言选择对应语音合成API,将第1步中获取的音色ID作为voice参数传递至合成接口(调用接口时,可通过请求参数对音量、语速等进行调节),参见:

以下示例代码展示如何复刻声音,并使用cosyvoice-v2模型调用复刻的声音,将文本“今天天气怎么样?”转换为语音。

说明
  • 声音复刻的接口并发调用限制为 10 RPS。

    声音复刻时,无论您是仅使用 v1、仅使用 v2,还是同时调用两者,系统对所有请求的总并发限制均为 10 RPS。这意味着:

    • 如果您仅调用 v1,则其最大并发请求为 10 RPS。

    • 如果您同时调用 v1 和 v2,两者的请求总和不能超过 10 RPS(例如,v1 使用 7 RPS,则 v2 最多只能使用 3 RPS)。

  • 语音合成的接口并发调用限制为3RPS。

    语音合成时,无论单独使用还是同时使用,v1v2的并发调用限制都为3RPS。两者相互独立,互不干扰。

  • 示例代码仅提供 Java 和 Python 的基础示例,实际业务场景中的相关代码需您根据具体需求自行开发。

重要

请保持复刻时的 target_model/targetModel 和调用语音合成时的 model 字段一致。

Python
Java
import os
import dashscope
from dashscope.audio.tts_v2 import VoiceEnrollmentService, SpeechSynthesizer

dashscope.api_key = os.getenv('DASHSCOPE_API_KEY')  # 如果您没有配置环境变量,请在此处用您的API-KEY进行替换
url = "https://your-audio-file-url"  # 请按实际情况进行替换
prefix = 'prefix'
target_model = "cosyvoice-v2"

# 创建语音注册服务实例
service = VoiceEnrollmentService()

# 调用create_voice方法复刻声音,并生成voice_id
# 避免频繁调用 create_voice 方法。每次调用都会创建新音色,每个阿里云主账号最多可复刻 1000 个音色,超额时请删除不用的音色或申请扩容。
voice_id = service.create_voice(target_model=target_model, prefix=prefix, url=url)
print("requestId: ", service.get_last_request_id())
print(f"your voice id is {voice_id}")

# 使用复刻的声音进行语音合成
synthesizer = SpeechSynthesizer(model=target_model, voice=voice_id)
audio = synthesizer.call("今天天气怎么样?")
print("requestId: ", synthesizer.get_last_request_id())

# 将合成的音频文件保存到本地文件
with open("output.mp3", "wb") as f:
    f.write(audio)
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
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 java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import static java.lang.System.exit;

public class VoiceEnrollmentSampleCodes {
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");  // 如果您没有配置环境变量,请在此处用您的API-KEY进行替换
    private static String fileUrl = "https://your-audio-file-url";  // 请按实际情况进行替换
    private static String prefix = "prefix";
    private static String targetModel = "cosyvoice-v2";

    public static void main(String[] args)
            throws NoApiKeyException, InputRequiredException {
        // 复刻声音
        VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
        Voice myVoice = service.createVoice(targetModel, prefix, fileUrl);
        System.out.println("RequestId: " + service.getLastRequestId());
        System.out.println("your voice id is " + myVoice.getVoiceId());
        // 使用复刻的声音来合成文本为语音
        SpeechSynthesisParam param = SpeechSynthesisParam.builder()
                .apiKey(apiKey)
                .model(targetModel)
                .voice(myVoice.getVoiceId())
                .build();
        SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
        ByteBuffer audio = synthesizer.call("今天天气怎么样?");
        // 保存合成的语音到文件
        System.out.println("TTS RequestId: " + synthesizer.getLastRequestId());
        File file = new File("output.mp3");
        try (FileOutputStream fos = new FileOutputStream(file)) {
            fos.write(audio.array());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        exit(0);
    }
}

错误码

Python SDK中调用发生错误将通过异常VoiceEnrollmentException抛出。异常包括:状态码、异常代码、异常描述。

class VoiceEnrollmentException(Exception):
  def __init__(self, status_code: int, code: str, error_message: str)

Java SDK中调用发生错误将通过NoApiKeyExceptionInputRequiredException异常抛出。

声音复刻中可能遇到的错误码如下:

HTTP返回码

错误代码 Code

错误信息 Message

(具体信息内容可能跟随场景有所变化)

含义说明

HTTP返回码

错误代码 Code

错误信息 Message

(具体信息内容可能跟随场景有所变化)

含义说明

415

BadRequest.UnsupportedFileFormat

File format unsupported.

文件格式不支持。

416

BadRequest.ResourceNotExist

The Required resource not exist.

更新、查询或删除接口调用时资源不存在。

430

Audio.DecoderError

Decoder audio file failed.

音频文件解码失败。

430

Audio.FileSizeExceed

File too large

文件大小超限,用于声音复刻的音频文件需10M以内。

430

Audio.AudioRateError

File sample rate unsupported

文件采样率不支持,要求16KHz 及以上。

430

Audio.AudioSilentError

Silent file unsupported

文件为静音或非静音长度过短,声音复刻要求10秒以上有效音频。

500

InternalError

audio preprocess server error

音频文件不规范,比如声音本身有问题,有杂音或者声音忽高忽低。

更多通用错误码的详细信息,请参见错误信息

常见问题

Q:如何对自定义音色的语速、音量等进行调节?

A:对于自定义音色的使用,和默认音色的使用方式是一样的:调用CosyVoice语音合成接口,传入对应的请求参数即可对语速(speechRatespeech_rate参数)、音量(volume参数)等进行调节。完整操作流程请参见使用复刻的音色进行语音合成

Q:如何将音频文件以公网可访问的URL形式提供?

A:通常遵循以下几个步骤(这里为您提供一种思路,具体情况因不同存储产品而异,推荐将音频上传至阿里云OSS):

1、选择存储和托管方式

如以下这几种:

  • 对象存储服务(推荐):

    • 使用云服务商的对象存储服务(如阿里云OSS),将音频文件上传到存储桶中,并设置为公开访问。

    • 优点:高可用性、支持 CDN 加速、易于管理。

  • Web 服务器:

    • 将音频文件放置在支持 HTTP/HTTPS 访问的 Web 服务器上(如 Nginx、Apache)。

    • 优点:适合小型项目或本地测试。

  • 内容分发网络(CDN):

    • 将音频文件托管在 CDN 上,通过 CDN 提供的 URL 访问。

    • 优点:加速文件传输,适合高并发场景。

2、上传音频文件

根据选择的存储/托管方式,将音频上传,如:

  • 对象存储服务:

    • 登录云服务商的控制台,创建存储桶。

    • 上传音频文件,并设置文件权限为“公共读”或生成临时访问链接。

  • Web 服务器:

    • 将音频文件放置在服务器指定目录下(如 /var/www/html/audio/)。

    • 确保文件可以通过 HTTP/HTTPS 访问。

3、生成公网可访问的URL

例如:

  • 对象存储服务:

    • 文件上传后,系统会自动生成一个公网访问 URL(通常格式为 https://<bucket-name>.<region>.aliyuncs.com/<file-name>)。

    • 如果需要更友好的域名,可以绑定自定义域名并开启 HTTPS。

  • Web 服务器:

    • 文件的访问 URL 通常是服务器地址加上文件路径(如 https://your-domain.com/audio/file.mp3)。

  • CDN:

    • 配置 CDN 加速后,使用 CDN 提供的 URL(如 https://cdn.your-domain.com/audio/file.mp3)。

4、验证URL的可用性

公网环境下,确保生成的 URL 可以正常访问,例如:

  • 在浏览器中打开 URL,检查是否能播放音频文件。

  • 使用工具(如 curl 或 Postman)验证 URL 是否返回正确的 HTTP 响应(状态码 200)。

  • 本页导读 (1)
  • 应用场景
  • 产品优势
  • 支持的模型
  • 支持的语言
  • 注意事项
  • 计费说明
  • 前提条件
  • API详情
  • 创建音色
  • 查询所有音色
  • 查询指定音色
  • 更新音色
  • 删除音色
  • 使用复刻的音色进行语音合成
  • 错误码
  • 常见问题
  • Q:如何对自定义音色的语速、音量等进行调节?
  • Q:如何将音频文件以公网可访问的URL形式提供?
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等