最近更新时间:2024.04.16 11:59:48
首次发布时间:2023.11.27 21:19:18
域名: https://openspeech.bytedance.com
具体请求方式可参考下方示例代码
接口路径: POST
/api/v1/mega_tts/audio/upload
接口描述: 提交音频训练音色
认证方式使用Bearer Token,在请求的header中加上"Authorization": "Bearer; {token}"
,并在请求的json中填入对应的appid。
注意
Bearer和token使用分号 ; 分隔,替换时请勿保留{}
AppID/Token/Cluster 等信息可参考 控制台使用FAQ-Q1
Header:
参数名称 | 参数类型 | 必须参数 | 备注 |
---|---|---|---|
Authorization | string | 必填 | Bearer;${Access Token} |
Resource-Id | string | 必填 | 填入volc.megatts.voiceclone |
Body:
参数名称 | 层级 | 参数类型 | 必须参数 | 备注 |
---|---|---|---|---|
appid | 1 | string | 必填 | |
speaker_id | 1 | string | 必填 | 唯一音色代号 |
audios | 1 | list | 必填 |
|
audio_bytes | 2 | string | 必填 | 二进制音频字节,需对二进制音频进行base64编码 |
audio_format | 2 | string | 音频格式,pcm、m4a必传,其余可选 | |
text | 2 | string | 可以让用户按照该文本念诵,服务会对比音频与该文本的差异。若差异过大会返回1109 WERError | |
source | 1 | int | 必填 | 固定值:2 |
json示例
{ "speaker_id": "S_*******", "appid": "your appid", "audios": [{ "audio_bytes": "base64编码后的音频", "audio_format": "wav" }], "source": 2 }
Body:
参数名称 | 层级 | 参数类型 | 必须参数 | 备注 |
---|---|---|---|---|
BaseResp | 1 | object | 必填 | |
StatusCode | 2 | int | 必填 | 成功:0 |
StatusMessage | 2 | string | 错误信息 | |
speaker_id | 1 | string | 必填 | 唯一音色代号 |
json示例
{ "BaseResp":{ "StatusCode":0, "StatusMessage":"" }, "speaker_id":"S_*******" }
注意
该接口仅在音色激活前可用,激活一段时间后使用将无法获取音色状态。建议使用批量查询接口
接口路径: POST
/api/v1/mega_tts/status
接口描述: 查询音色训练状态
Header:
参数名称 | 参数类型 | 必须参数 | 备注 |
---|---|---|---|
Authorization | string | 必填 | Bearer;${Access Token} |
Resource-Id | string | 必填 | 填入volc.megatts.voiceclone |
Body:
参数名称 | 层级 | 类型 | 必填 | 备注 |
---|---|---|---|---|
appid | 1 | string | 必填 | |
speaker_id | 1 | string | 必填 | 唯一音色代号 |
json示例
{ "appid": "your appid", "speaker_id": "S_*******" }
Body:
参数名称 | 层级 | 参数类型 | 必须参数 | 备注 |
---|---|---|---|---|
BaseResp | 1 | object | 必填 | |
StatusCode | 2 | int | 必填 | 成功:0 |
StatusMessage | 2 | string | 错误信息 | |
speaker_id | 1 | string | 必填 | 唯一音色代号 |
status | 1 | enum { NotFound = 0 Training = 1 Success = 2 Failed = 3 Active = 4 } | 必填 | 训练状态,状态为4(Active)时可调用tts合成音频 |
create_time | 1 | int | 必填 | 创建时间 |
version | 1 | string | 选填 | 训练版本 |
demo_audio | 1 | string | 选填 | Success状态时返回,一小时有效,若需要,请下载后使用 |
json示例
{ "BaseResp":{ "StatusCode":0, "StatusMessage":"" }, "creaet_time":1701055304000, "version": "V1", "demo_audio": "http://**********.wav" "speaker_id":"S_*******", "status":2 }
Success | 0 | 成功 |
---|---|---|
BadRequestError | 1001 | 请求参数有误 |
AudioUploadError | 1101 | 音频上传失败 |
ASRError | 1102 | ASR转写失败 |
SIDError | 1103 | SID声纹检测失败 |
SIDFailError | 1104 | 声纹检测未通过,声纹跟名人相似度过高 |
GetAudioDataError | 1105 | 获取音频数据失败 |
SpeakerIDDuplicationError | 1106 | SpeakerID重复 |
SpeakerIDNotFoundError | 1107 | SpeakerID未找到 |
AudioConvertError | 1108 | 音频转码失败 |
WERError | 1109 | wer检测错误,上传音频与请求携带文本对比字错率过高 |
AEDError | 1111 | aed检测错误 |
SNRError | 1112 | SNR检测错误 |
DenoiseError | 1113 | 降噪处理失败 |
AudioQualityError | 1114 | 音频质量低,降噪失败 |
ASRNoSpeakerError | 1122 | 未检测到人声 |
已达上传次数限制 | 1123 | 上传接口已经达到次数限制,目前同一个音色支持10次上传 |
接口与TTS一致,需要将集群名称cluster
换成volcano_mega
使用账号申请部分申请到的appid&access_token进行调用
文本一次性送入,后端边合成边返回音频数据
使用账号申请部分申请到的appid&access_token进行调用
文本全部合成完毕之后,一次性返回全部的音频数据
鉴权方式说明 公共参数--API签名调用指南-火山引擎 (volcengine.com)
线上请求地址域名 open.volcengineapi.com
固定公共参数
Region = "cn-north-1" Service = "speech_saas_prod" Version = "2023-11-07"
AKSK获取 访问控制-火山引擎 (volcengine.com)
说明:Access Key(密钥)管理--API访问密钥(Access Key)-火山引擎 (volcengine.com)
调用方式
直接签名后调用
结合文档内api说明调用 ListMegaTTSTrainStatus
的例子(*其他语言和使用sdk调用的方式请参考火山鉴权源码说明 一)
示例代码:
非 2xx 开头的HTTP返回状态码被可以认为是错误
错误的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" } } }
"ResponseMetadata.Error.Code" 客户端可以依照这个字段判断错误种类,已知种类和含义如下
Code | Description |
---|---|
OperationDenied.InvalidSpeakerID | 账号或AppID无权限操作或无法操作SpeakerID列表中的一个或多个实例 |
OperationDenied.InvalidParameter | 请求体字段不合法(缺失必填字段、类型错误等) |
InternalError.NotCaptured | 未知的服务内部错误 |
a. Description
查询已购买的音色状态;如果SpeakerIDs为空则返回账号的AppID下所有的列表(有最大值限制1000);如果SpeakerIDs不为空则返回对应的结果,且结果总是包含输入的SpeakerID(即使查询不到它)
b. Method: POST
c. Request
Parameter | Type | Must | Argument type | Description |
---|---|---|---|---|
Content-Type | string | Y | header | Constant string: application/json; charset=utf-8 |
Action | string | Y | query | ListMegaTTSTrainStatus |
Version | string | Y | query | 2023-11-07 |
AppID | string | Y | body | AppID of application |
SpeakerIDs | []string | N | body | List 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:
State | Description |
---|---|
Unknown | 未找到对应SpeakerID的记录 |
Training | 声音复刻中(长时间处于复刻中状态请联系TODO) |
Success | 声音复刻成功,可以进行启动(update)操作 |
Active | 使用中 |
Expired | 火山控制台实例已过期或账号欠费 |
Reclaimed | 火山控制台实例已回收 |
BatchListMegaTTSTrainStatus
a. Description
查询已购买的音色状态;相比ListMegaTTSTrainStatus
增加了分页相关参数和返回;支持使用token和声明页数两种分页方式;其中,
分页token在最后一页为空
分页token采用私有密钥进行加密
分页接口为新接口,不影响已有接口行为
b. Method: POST
c. Request
Parameter | Type | Must | Argument type | Description |
---|---|---|---|---|
Content-Type | string | Y | header | Constant string: application/json; charset=utf-8 |
Action | string | Y | query | ListMegaTTSTrainStatus |
Version | string | Y | query | 2023-11-07 |
AppID | string | Y | body | AppID of application |
SpeakerIDs | []string | N | body | List of speaker IDs; if empty, resp will return all speakerIDs from given appID |
PageNumber | int | N | body | Page number requested, larger than 0, default to 1 |
PageSize | int | N | body | Page size requested, must be in range [1, 100], default to 10 |
NextToken | string | N | body | String acquired from last response; if not nil, overwrite page number and size settings |
MaxResults | int | N | body | MaxResults 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 } ] } }
a. Description
对应火山页面的启动音色;如果输入的音色列表中有一个或多个音色不能被激活,或找不到它的记录,那么所有的音色都不会被激活,并且会返回错误 OperationDenied.InvalidSpeakerID;如果输入的音色列表为空,那么返回字段不合法的错误OperationDenied.InvalidParameter;距离音色可被访问可能会有分钟级别延迟;
b. Method: POST
c. Request
Parameter | Type | Must | Argument type | Description |
---|---|---|---|---|
Content-Type | string | Y | header | Constant string: application/json; charset=utf-8 |
Action | string | Y | query | ActivateMegaTTSTrainStatus |
Version | string | Y | query | 2023-11-07 |
AppID | string | Y | body | AppID of application |
SpeakerIDs | []string | Y | body | List 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 } ] } }