You need to enable JavaScript to run this app.
导航
声音复刻API
最近更新时间:2024.07.26 17:18:19首次发布时间: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:

参数名称

参数类型

必须参数

备注

Authorization

string

必填

Bearer;${Access Token}

Resource-Id

string

必填

填入volc.megatts.voiceclone

Body:

参数名称

层级

参数类型

必须参数

备注

appid

1

string

必填

speaker_id

1

string

必填

唯一音色代号

audios

1

list

必填

  • 音频格式支持:wav、mp3、ogg、m4a、aac、pcm,其中pcm仅支持24k 单通道
  • 目前限制单文件上传最大20MB
  • 每次最多上传1个音频文件

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

3. 状态查询(status接口)

注意

该接口仅在音色已经训练至少一次后以及激活前可用,且激活一段时间后使用将无法获取音色状态。建议使用查询接口及分页查询接口

接口路径: 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
}

4. 状态码

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次上传

5. 示例代码

uploadAndStatus.py
1.77KB

TTS 语音合成(WS/HTTP)

音色训练成功后,需要通过调用TTS接口来使用音色合成指定文本的音频。

注意

接口与TTS参数有差别,需要将cluster换成volcano_megavoice_type声音id。如果合成非中文的时候需要使用language参数指定语种。其他差异请参考参数基本说明

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" 客户端可以依照这个字段判断错误种类,已知种类和含义如下

    Code

    Description

    OperationDenied.InvalidSpeakerID

    账号或AppID无权限操作或无法操作SpeakerID列表中的一个或多个实例

    OperationDenied.InvalidParameter

    请求体字段不合法(缺失必填字段、类型错误等)

    InternalError.NotCaptured

    未知的服务内部错误

API列表

1. 查询 SpeakerID 状态

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

Parameter

Type

Must

Argument type

Description

Content-Type

string

Y

header

固定字符串: application/json; charset=utf-8

Action

string

Y

query

ListMegaTTSTrainStatus

Version

string

Y

query

2023-11-07

AppID

string

Y

body

AppID

SpeakerIDs

[]string

N

body

SpeakerID的列表,传空为返回指定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已训练过的次数
                              "ExpireTime": 1732895999000, //过期时间
                              "Alias": "", //别名,和控制台同步
                              "AvailableTrainingTimes": 9 //剩余训练次数,激活音色为0
                        },
                        {
                              "SpeakerID": "S_VYBmqB0B", // speakerID
                              "State": "Unknown", // speakerID的状态
                        }
                  ]
          }
      }

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

State

Description

Unknown

SpeakerID尚未进行训练

Training

声音复刻训练中(长时间处于复刻中状态请联系火山引擎技术人员)

Success

声音复刻训练成功,可以进行TTS合成

Active

已激活(无法再次训练)

Expired

火山控制台实例已过期或账号欠费

Reclaimed

火山控制台实例已回收

2. 分页查询SpeakerID状态 BatchListMegaTTSTrainStatus

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

  • 分页token在最后一页为空
  • 分页token采用私有密钥进行加密
  • 分页接口为新接口,不影响已有接口行为

b. Method: POST
c. Request

Parameter

Type

Must

Argument type

Description

Content-Type

string

Y

header

固定字符串: application/json; charset=utf-8

Action

string

Y

query

BatchListMegaTTSTrainStatus

Version

string

Y

query

2023-11-07

AppID

string

Y

body

AppID

SpeakerIDs

[]string

N

body

SpeakerID的列表,传空为返回指定APPID下的全部SpeakerID

PageNumber

int

N

body

页数, 需大于0, 默认为1

PageSize

int

N

body

每页条数, 必须在范围[1, 100]内, 默认为10

NextToken

string

N

body

上次请求返回的字符串; 如果不为空的话, 将覆盖PageNumber及PageSize的值

MaxResults

int

N

body

与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

Parameter

Type

Must

Argument type

Description

Content-Type

string

Y

header

固定字符串: application/json; charset=utf-8

Action

string

Y

query

ActivateMegaTTSTrainStatus

Version

string

Y

query

2023-11-07

AppID

string

Y

body

AppID

SpeakerIDs

[]string

Y

body

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", // volcengine Instance Number
                              "IsActivable": false, // speakerID是否可激活
                              "SpeakerID": "S_VYBmqB0A", // speakerID
                              "State": "Active", // speakerID的状态
                              "Version": "V1" // speakerID已训练过的次数
                        }
                  ]
          }
      }