You need to enable JavaScript to run this app.
导航
声音复刻API
最近更新时间:2024.05.07 14:35:41首次发布时间:2023.11.27 21:19:18
创建音色

1. 请求方式

域名: https://openspeech.bytedance.com
具体请求方式可参考下方示例代码

2. 训练(upload接口)

接口路径: POST/api/v1/mega_tts/audio/upload
接口描述: 提交音频训练音色

认证方式使用Bearer Token,在请求的header中加上"Authorization": "Bearer; {token}",并在请求的json中填入对应的appid。

注意

Bearer和token使用分号 ; 分隔,替换时请勿保留{}

AppID/Token/Cluster 等信息可参考 控制台使用FAQ-Q1

请求参数

Header:

参数名称参数类型必须参数备注
Authorizationstring必填Bearer;${Access Token}
Resource-Idstring必填填入volc.megatts.voiceclone

Body:

参数名称层级参数类型必须参数备注
appid1string必填
speaker_id1string必填唯一音色代号

audios

1

list

必填

  • 音频格式支持:wav、mp3、ogg、m4a、aac、pcm,其中pcm仅支持24k 单通道

  • 目前限制单文件上传最大20MB

  • 每次最多上传1个音频文件

audio_bytes2string必填二进制音频字节,需对二进制音频进行base64编码
audio_format2string音频格式,pcm、m4a必传,其余可选
text2string可以让用户按照该文本念诵,服务会对比音频与该文本的差异。若差异过大会返回1109 WERError
source1int必填固定值:2

json示例

{
        "speaker_id": "S_*******",
        "appid": "your appid",
        "audios": [{
                "audio_bytes": "base64编码后的音频",
                "audio_format": "wav"
        }],
        "source": 2
}

返回数据

Body:

参数名称层级参数类型必须参数备注
BaseResp1object必填
StatusCode2int必填成功:0
StatusMessage2string错误信息
speaker_id1string必填唯一音色代号

json示例

{
    "BaseResp":{
        "StatusCode":0,
        "StatusMessage":""
    },
    "speaker_id":"S_*******"
}

3. 状态查询(status接口)

注意

该接口仅在音色激活前可用,激活一段时间后使用将无法获取音色状态。建议使用批量查询接口

接口路径: POST/api/v1/mega_tts/status
接口描述: 查询音色训练状态

请求参数

Header:

参数名称参数类型必须参数备注
Authorizationstring必填Bearer;${Access Token}
Resource-Idstring必填填入volc.megatts.voiceclone

Body:

参数名称层级类型必填备注
appid1string必填
speaker_id1string必填唯一音色代号

json示例

{
    "appid": "your appid",
    "speaker_id": "S_*******"
}

返回数据

Body:

参数名称层级参数类型必须参数备注
BaseResp1object必填
StatusCode2int必填成功:0
StatusMessage2string错误信息
speaker_id1string必填唯一音色代号

status

1

enum { NotFound = 0 Training = 1 Success = 2 Failed = 3 Active = 4 }

必填

训练状态,状态为4(Active)时可调用tts合成音频

create_time1int必填创建时间
version1string选填训练版本
demo_audio1string选填Success状态时返回,一小时有效,若需要,请下载后使用

json示例

{
    "BaseResp":{
        "StatusCode":0,
        "StatusMessage":""
    },
    "creaet_time":1701055304000,
    "version": "V1",
    "demo_audio": "http://**********.wav"
    "speaker_id":"S_*******",
    "status":2
}

4. 状态码

Success0成功
BadRequestError1001请求参数有误
AudioUploadError1101音频上传失败
ASRError1102ASR(语音识别成文字)转写失败
SIDError1103SID声纹检测失败
SIDFailError1104声纹检测未通过,声纹跟名人相似度过高
GetAudioDataError1105获取音频数据失败
SpeakerIDDuplicationError1106SpeakerID重复
SpeakerIDNotFoundError1107SpeakerID未找到
AudioConvertError1108音频转码失败
WERError1109wer检测错误,上传音频与请求携带文本对比字错率过高
AEDError1111aed检测错误,通常由于音频不包含说话声
SNRError1112SNR检测错误,通常由于信噪比过高
DenoiseError1113降噪处理失败
AudioQualityError1114音频质量低,降噪失败
ASRNoSpeakerError1122未检测到人声
已达上传次数限制1123上传接口已经达到次数限制,目前同一个音色支持10次上传

5. 示例代码

uploadAndStatus.py
1.77KB
TTS 语音合成(WS/HTTP)

接口与TTS一致,需要将集群名称cluster换成volcano_mega

Websocket

使用账号申请部分申请到的appid&access_token进行调用
文本一次性送入,后端边合成边返回音频数据

HTTP

使用账号申请部分申请到的appid&access_token进行调用
文本全部合成完毕之后,一次性返回全部的音频数据

查询接口及激活(启用)音色接口

API接入说明

访问鉴权

  1. 鉴权方式说明 公共参数--API签名调用指南-火山引擎 (volcengine.com)
    线上请求地址域名 open.volcengineapi.com

  2. 固定公共参数

    Region = "cn-north-1"
    Service = "speech_saas_prod"
    Version = "2023-11-07"
    
  3. AKSK获取 访问控制-火山引擎 (volcengine.com)
    说明:Access Key(密钥)管理--API访问密钥(Access Key)-火山引擎 (volcengine.com)

  4. 调用方式

    1. SDK SDK概览--API签名调用指南-火山引擎 (volcengine.com)

    2. 直接签名后调用
      结合文档内api说明调用 ListMegaTTSTrainStatus 的例子(*其他语言和使用sdk调用的方式请参考火山鉴权源码说明 一)

    3. 示例代码:

      sign.py
      6.17KB

      sign.java
      8.70KB

      sign.go
      5.07KB

错误码

  1. 2xx 开头的HTTP返回状态码被可以认为是错误

  2. 错误的HTTP返回结构体如下

    {
        "ResponseMetadata": {
            "RequestId": "20220214145719010211209131054BC103", // header中的X-Top-Request-Id参数
            "Action": "ListMegaTTSTrainStatus",
            "Version": "2023-11-07",
            "Service": "{Service}",// header中的X-Top-Service参数
            "Region": "{Region}", // header中的X-Top-Region参数
            "Error": {
                "Code": "InternalError.NotCaptured",
                "Message": "xxx"
            }
        }
    }
    
  3. "ResponseMetadata.Error.Code" 客户端可以依照这个字段判断错误种类,已知种类和含义如下

    CodeDescription
    OperationDenied.InvalidSpeakerID账号或AppID无权限操作或无法操作SpeakerID列表中的一个或多个实例
    OperationDenied.InvalidParameter请求体字段不合法(缺失必填字段、类型错误等)
    InternalError.NotCaptured未知的服务内部错误

API列表

1. 查询 SpeakerID 状态

a. Description
查询已购买的音色状态;如果SpeakerIDs为空则返回账号的AppID下所有的列表(有最大值限制1000);如果SpeakerIDs不为空则返回对应的结果,且结果总是包含输入的SpeakerID(即使查询不到它)

b. Method: POST

c. Request

ParameterTypeMustArgument typeDescription
Content-TypestringYheader固定字符串: application/json; charset=utf-8
ActionstringYqueryListMegaTTSTrainStatus
VersionstringYquery2023-11-07
AppIDstringYbodyAppID
SpeakerIDs[]stringNbodySpeakerID的列表,传空为返回指定APPID下的全部SpeakerID

d. Response

{
		    "ResponseMetadata": {
		        "RequestId": "20220214145719010211209131054BC103", // header中的X-Top-Request-Id参数
		        "Action": "",
		        "Version": "",
		        "Service": "{Service}",// header中的X-Top-Service参数
		        "Region": "{Region}" // header中的X-Top-Region参数
		    },
		    "Result":{
		            "Statuses": [
		                   {
		                        "CreateTime": 1700727790000, // unix epoch格式的创建时间,单位ms
		                        "DemoAudio": "https://example.com", // http demo链接
		                        "InstanceNO": "Model_storage_meUQ8YtIPm", // 火山引擎实例number
		                        "IsActivable": true, // 是否可激活
		                        "SpeakerID": "S_VYBmqB0A", // speakerID
		                        "State": "Success", // speakerID的状态
		                        "Version": "V1" // speakerID已训练过的次数
		                  },
		                  {
		                        "SpeakerID": "S_VYBmqB0B", // speakerID
		                        "State": "Unknown", // speakerID的状态
		                  }
		            ]
		    }
		}

e. State of speakerID is an enum with possible values of:

StateDescription
UnknownSpeakerID尚未进行训练
Training声音复刻训练中(长时间处于复刻中状态请联系火山引擎技术人员)
Success声音复刻训练成功,可以进行TTS合成
Active已激活(无法再次训练)
Expired火山控制台实例已过期或账号欠费
Reclaimed火山控制台实例已回收

2. 分页查询SpeakerID状态 BatchListMegaTTSTrainStatus

a. Description

查询已购买的音色状态;相比ListMegaTTSTrainStatus 增加了分页相关参数和返回;支持使用token和声明页数两种分页方式;其中,

  • 分页token在最后一页为空

  • 分页token采用私有密钥进行加密

  • 分页接口为新接口,不影响已有接口行为

b. Method: POST

c. Request

ParameterTypeMustArgument typeDescription
Content-TypestringYheader固定字符串: application/json; charset=utf-8
ActionstringYqueryBatchListMegaTTSTrainStatus
VersionstringYquery2023-11-07
AppIDstringYbodyAppID
SpeakerIDs[]stringNbodySpeakerID的列表,传空为返回指定APPID下的全部SpeakerID
PageNumberintNbody页数, 需大于0, 默认为1
PageSizeintNbody每页条数, 必须在范围[1, 100]内, 默认为10
NextTokenstringNbody上次请求返回的字符串; 如果不为空的话, 将覆盖PageNumber及PageSize的值
MaxResultsintNbody与NextToken相配合控制返回结果的最大数量; 如果不为空则必须在范围[1, 100]内, 默认为10

d. Response

{
	    "ResponseMetadata": {
	        "RequestId": "20220214145719010211209131054BC103", // header中的X-Top-Request-Id参数
	        "Action": "BatchListMegaTTSTrainStatus",
	        "Version": "2023-11-07",
	        "Service": "{Service}",// header中的X-Top-Service参数
	        "Region": "{Region}" // header中的X-Top-Region参数
	    },
	    "Result":{
	            "AppID": "xxx",
	            "TotalCount": 2, // speakerIDs总数量
	            "NextToken": "", // NextToken字符串,可发送请求后面的结果; 如果没有更多结果将为空
	            "PageNumber": 1, // 使用分页参数时的当前页数
	            "PageSize": 2, // 使用分页参数时当前页包含的条数
	            "Statuses": [
	                   {
	                        "CreateTime": 1700727790000, // unix epoch格式的创建时间,单位ms
	                        "DemoAudio": "https://example.com", // http demo链接
	                        "InstanceNO": "Model_storage_meUQ8YtIPm", // 火山引擎实例Number
	                        "IsActivable": true, // 是否可激活
	                        "SpeakerID": "S_VYBmqB0A", // speakerID
	                        "State": "Success", // speakerID的状态
	                        "Version": "V1" // speakerID已训练过的次数
	                  },
	                  {
	                        "SpeakerID": "S_VYBmqB0B", // speakerID
	                        "State": "Unknown", // speakerID的状态
	                  }
	            ]
	    }
	}

3. 激活 (activate) SpeakerID

警告

目前已无需调用该接口即可进行tts合成。调用该接口后将无法继续训练,无论是否还有剩余的训练次数。

a. Description

对应火山页面的启动音色;如果输入的音色列表中有一个或多个音色不能被激活,或找不到它的记录,那么所有的音色都不会被激活,并且会返回错误 OperationDenied.InvalidSpeakerID;如果输入的音色列表为空,那么返回字段不合法的错误OperationDenied.InvalidParameter;距离音色可被访问可能会有分钟级别延迟;

b. Method: POST

c. Request

ParameterTypeMustArgument typeDescription
Content-TypestringYheader固定字符串: application/json; charset=utf-8
ActionstringYqueryActivateMegaTTSTrainStatus
VersionstringYquery2023-11-07
AppIDstringYbodyAppID
SpeakerIDs[]stringYbodyspeakerID的列表

d. Response

{
		    "ResponseMetadata": {
		        "RequestId": "20220214145719010211209131054BC103", // header中的X-Top-Request-Id参数
		        "Action": "",
		        "Version": "",
		        "Service": "{Service}",// header中的X-Top-Service参数
		        "Region": "{Region}" // header中的X-Top-Region参数
		    },
		    "Result":{
		            "Statuses": [
		                   {
		                        "CreateTime": 1700727790000, // unix epoch格式的创建时间,单位ms
		                        "DemoAudio": "https://example.com", // http demo链接
		                        "InstanceNO": "Model_storage_meUQ8YtIPm", // volcengine Instance Number
		                        "IsActivable": false, // speakerID是否可激活
		                        "SpeakerID": "S_VYBmqB0A", // speakerID
		                        "State": "Active", // speakerID的状态
		                        "Version": "V1" // speakerID已训练过的次数
		                  }
		            ]
		    }
		}