You need to enable JavaScript to run this app.
导航

声音复刻API

最近更新时间2024.04.16 11:59:48

首次发布时间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-TypestringYheaderConstant string: application/json; charset=utf-8
ActionstringYqueryListMegaTTSTrainStatus
VersionstringYquery2023-11-07
AppIDstringYbodyAppID of application
SpeakerIDs[]stringNbodyList of speaker IDs; if empty, resp will return all speakerIDs from given appID

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 create time in millisecond
		                        "DemoAudio": "https://example.com", // http demo link
		                        "InstanceNO": "Model_storage_meUQ8YtIPm", // volcengine Instance Number
		                        "IsActivable": true, // if this speakerID can be updated later
		                        "SpeakerID": "S_VYBmqB0A", // speakerID
		                        "State": "Success", // state of speakerID
		                        "Version": "V1" // version of speakerID
		                  },
		                  {
		                        "SpeakerID": "S_VYBmqB0B", // speakerID
		                        "State": "Unknown", // state of speakerID
		                  }
		            ]
		    }
		}

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

StateDescription
Unknown未找到对应SpeakerID的记录
Training声音复刻中(长时间处于复刻中状态请联系TODO)
Success声音复刻成功,可以进行启动(update)操作
Active使用中
Expired火山控制台实例已过期或账号欠费
Reclaimed火山控制台实例已回收

2. 分页查询SpeakerID状态 BatchListMegaTTSTrainStatus

a. Description

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

  • 分页token在最后一页为空

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

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

b. Method: POST

c. Request

ParameterTypeMustArgument typeDescription
Content-TypestringYheaderConstant string: application/json; charset=utf-8
ActionstringYqueryListMegaTTSTrainStatus
VersionstringYquery2023-11-07
AppIDstringYbodyAppID of application
SpeakerIDs[]stringNbodyList of speaker IDs; if empty, resp will return all speakerIDs from given appID
PageNumberintNbodyPage number requested, larger than 0, default to 1
PageSizeintNbodyPage size requested, must be in range [1, 100], default to 10
NextTokenstringNbodyString acquired from last response; if not nil, overwrite page number and size settings
MaxResultsintNbodyMaxResults of results returned; must be used together with NextToken; if not nil, must be in range [1, 100], default to 10

d. Response

{
	    "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参数
	    },
	    "Result":{
	            "AppID": "xxx",
	            "TotalCount": 2, // number of speakerIDs in total
	            "NextToken": "", // next token to request next page; empty if no more results
	            "PageNumber": 1, // page number queried if using page number param
	            "PageSize": 2, // page size queried if using page size param
	            "Statuses": [
	                   {
	                        "CreateTime": 1700727790000, // unix epoch create time in millisecond
	                        "DemoAudio": "https://example.com", // http demo link
	                        "InstanceNO": "Model_storage_meUQ8YtIPm", // volcengine Instance Number
	                        "IsActivable": true, // if this speakerID can be updated later
	                        "SpeakerID": "S_VYBmqB0A", // speakerID
	                        "State": "Success", // state of speakerID
	                        "Version": "V1" // version of speakerID
	                  },
	                  {
	                        "SpeakerID": "S_VYBmqB0B", // speakerID
	                        "State": "Unknown", // state of speakerID
	                  }
	            ]
	    }
	}

3. 激活 (activate) SpeakerID

a. Description

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

b. Method: POST

c. Request

ParameterTypeMustArgument typeDescription
Content-TypestringYheaderConstant string: application/json; charset=utf-8
ActionstringYqueryActivateMegaTTSTrainStatus
VersionstringYquery2023-11-07
AppIDstringYbodyAppID of application
SpeakerIDs[]stringYbodyList of speaker IDs

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 create time in millisecond
		                        "DemoAudio": "https://example.com", // http demo link
		                        "InstanceNO": "Model_storage_meUQ8YtIPm", // volcengine Instance Number
		                        "IsActivable": false, // if this speakerID can be updated
		                        "SpeakerID": "S_VYBmqB0A", // speakerID
		                        "State": "Active", // state of speakerID
		                        "Version": "V1" // version of speakerID
		                  }
		            ]
		    }
		}