You need to enable JavaScript to run this app.
导航
语音合成大模型API
最近更新时间:2024.12.05 16:24:29首次发布时间:2024.04.25 10:44:40

说明

目前该能力只对企业客户开放,如需测试或接入须先进行企业认证。

Websocket

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

1. 接口说明

接口地址为 wss://openspeech.bytedance.com/api/v1/tts/ws_binary

2. 身份认证

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

注意

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

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

3. 请求方式

3.1 二进制协议

报文格式(Message format)

Image
所有字段以 Big Endian(大端序) 的方式存储。
字段描述

字段 Field (大小, 单位 bit)

描述 Description

值 Values

协议版本(Protocol version) (4)

可能会在将来使用不同的协议版本,所以这个字段是为了让客户端和服务器在版本上保持一致。

0b0001 - 版本 1 (目前只有版本 1)

报头大小(Header size) (4)

header 实际大小是 header size value x 4 bytes.
这里有个特殊值 0b1111 表示 header 大小大于或等于 60(15 x 4 bytes),也就是会存在 header extension 字段。

0b0001 - 报头大小 = 4 (1 x 4)
0b0010 - 报头大小 = 8 (2 x 4)
0b1010 - 报头大小 = 40 (10 x 4)
0b1110 - 报头大小 = 56 (14 x 4)
0b1111 - 报头大小为 60 或更大; 实际大小在 header extension 中定义

消息类型(Message type) (4)

定义消息类型。

0b0001 - full client request.
~~0b1001~~ - full server response(弃用).
0b1011 - Audio-only server response (ACK).
0b1111 - Error message from server (例如错误的消息类型,不支持的序列化方法等等)

Message type specific flags (4)

flags 含义取决于消息类型。
具体内容请看消息类型小节.

序列化方法(Message serialization method) (4)

定义序列化 payload 的方法。
注意:它只对某些特定的消息类型有意义 (例如 Audio-only server response 0b1011 就不需要序列化).

0b0000 - 无序列化 (raw bytes)
0b0001 - JSON
0b1111 - 自定义类型, 在 header extension 中定义

压缩方法(Message Compression) (4)

定义 payload 的压缩方法。
Payload size 字段不压缩(如果有的话,取决于消息类型),而且 Payload size 指的是 payload 压缩后的大小。
Header 不压缩。

0b0000 - 无压缩
0b0001 - gzip
0b1111 - 自定义压缩方法, 在 header extension 中定义

保留字段(Reserved) (8)

保留字段,同时作为边界 (使整个报头大小为 4 个字节).

0x00 - 目前只有 0

消息类型详细说明

目前所有 TTS websocket 请求都使用 full client request 格式,无论"query"还是"submit"。

Full client request

  • Header size为b0001(即 4B,没有 header extension)。
  • Message type为b0001.
  • Message type specific flags 固定为b0000.
  • Message serialization method为b0001JSON。字段参考上方表格。
  • 如果使用 gzip 压缩 payload,则 payload size 为压缩后的大小。

Audio-only server response

  • Header size 应该为b0001.
  • Message type为b1011.
  • Message type specific flags 可能的值有:
    • b0000 - 没有 sequence number.
    • b0001 - sequence number > 0.
    • b0010orb0011 - sequence number < 0,表示来自服务器的最后一条消息,此时客户端应合并所有音频片段(如果有多条)。
  • Message serialization method为b0000(raw bytes).

Demo

python
tts_websocket_demo.py
6.89KB

Java
tts-demo-java.zip
7.01KB

Go
tts_websocket_demo.go
7.68KB

HTTP

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

1. 接口说明

接口地址为 https://openspeech.bytedance.com/api/v1/tts

2. 身份认证

认证方式采用 Bearer Token.
1)需要在请求的 Header 中填入"Authorization":"Bearer;${token}"

注意

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

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

3. 注意事项

  • 使用 HTTP Post 方式进行请求,返回的结果为 JSON 格式,需要进行解析
  • 因 json 格式无法直接携带二进制音频,音频经 base64 编码。使用 base64 解码后,即为二进制音频
  • 每次合成时 reqid 这个参数需要重新设置,且要保证唯一性(建议使用 UUID/GUID 等生成)

参数列表

Websocket 与 Http 调用参数相同

请求参数

字段

含义

层级

格式

必需

备注

app

应用相关配置

1

dict

appid

应用标识

2

string

需要申请

token

应用令牌

2

string

可传任意非空字符串

cluster

业务集群

2

string

volcano_tts

user

用户相关配置

1

dict

uid

用户标识

2

string

可传任意非空字符串,传入值可以通过服务端日志追溯

audio

音频相关配置

1

dict

voice_type

音色类型

2

string

encoding

音频编码格式

2

string

wav / pcm / ogg_opus / mp3,默认为 pcm
注意:wav 不支持流式

speed_ratio

语速

2

float

[0.8,2],默认为 1,通常保留一位小数即可

request

请求相关配置

1

dict

reqid

请求标识

2

string

需要保证每次调用传入值唯一,建议使用 UUID

text

文本

2

string

合成语音的文本,长度限制 1024 字节(UTF-8 编码)

text_type

文本类型

2

string

使用 ssml 时需要指定,值为"ssml"

operation

操作

2

string

query(非流式,http 只能 query) / submit(流式)

备注:

  1. 暂时不支持时间戳能力
  2. ssml 能力已支持,详见 SSML 标记语言--语音技术-火山引擎 (volcengine.com)
  3. 暂时不支持音高,音量调节
  4. 大模型音色语种支持中英混

请求示例:

{
    "app": {
        "appid": "appid123",
        "token": "access_token",
        "cluster": "volcano_tts",
    },
    "user": {
        "uid": "uid123"
    },
    "audio": {
        "voice_type": "zh_male_M392_conversation_wvae_bigtts",
        "encoding": "mp3",
        "speed_ratio": 1.0,
    },
    "request": {
        "reqid": "uuid",
        "text": "字节跳动语音合成",
        "operation": "query",
    }
}

返回参数

字段

含义

层级

格式

备注

reqid

请求 ID

1

string

请求 ID,与传入的参数中 reqid 一致

code

请求状态码

1

int

错误码,参考下方说明

message

请求状态信息

1

string

错误信息

sequence

音频段序号

1

int

负数表示合成完毕

data

合成音频

1

string

返回的音频数据,base64 编码

addition

额外信息

1

string

额外信息父节点

duration

音频时长

2

string

返回音频的长度,单位 ms

响应示例

{
        "reqid": "reqid",
        "code": 3000,
        "operation": "query",
        "message": "Success",
        "sequence": -1,
        "data": "base64 encoded binary data",
        "addition": {
                "duration": "1960",
        }
}

注意事项

  • websocket 单条链接仅支持单次合成,若需要合成多次,则需要多次建立链接
  • 每次合成时 reqid 这个参数需要重新设置,且要保证唯一性(建议使用 uuid.V4 生成)
  • operation 需要设置为 submit

返回码说明

错误码

错误描述

举例

建议行为

3000

请求正确

正常合成

正常处理

3001

无效的请求

一些参数的值非法,比如 operation 配置错误

检查参数

3003

并发超限

超过在线设置的并发阈值

重试;使用 sdk 的情况下切换离线

3005

后端服务忙

后端服务器负载高

重试;使用 sdk 的情况下切换离线

3006

服务中断

请求已完成/失败之后,相同 reqid 再次请求

检查参数

3010

文本长度超限

单次请求超过设置的文本长度阈值

检查参数

3011

无效文本

参数有误或者文本为空、文本与语种不匹配、文本只含标点

检查参数

3030

处理超时

单次请求超过服务最长时间限制

重试或检查文本

3031

处理错误

后端出现异常

重试;使用 sdk 的情况下切换离线

3032

等待获取音频超时

后端网络异常

重试;使用 sdk 的情况下切换离线

3040

后端链路连接错误

后端网络异常

重试

3050

音色不存在

检查使用的 voice_type 代号

检查参数

常见错误返回说明
  1. 错误返回:
    "message": "quota exceeded for types: xxxxxxxxx_lifetime"
    错误原因:试用版用量用完了,需要开通正式版才能继续使用
  2. 错误返回:
    "message": "quota exceeded for types: concurrency"
    错误原因:并发超过了限定值,需要减少并发调用情况或者增购并发
  3. 错误返回:
    "message": "Fail to feed text, reason Init Engine Instance failed"
    错误原因:voice_type / cluster 传递错误
  4. 错误返回:
    "message": "illegal input text!"
    错误原因:传入的 text 无效,没有可合成的有效文本。比如全部是标点符号或者 emoji 表情,或者使用中文音色时,传递日语,以此类推。多语种音色,也需要使用 language 指定对应的语种
  5. 错误返回:
    "message": "authenticate request: load grant: requested grant not found"
    错误原因:鉴权失败,需要检查 appid&token 的值是否设置正确,同时,鉴权的正确格式为
    headers["Authorization"] = "Bearer;${token}"
  6. 错误返回:
    "message': 'extract request resource id: get resource id: access denied"
    错误原因:语音合成已开通正式版且未拥有当前音色授权,需要在控制台购买该音色才能调用。标注免费的音色除 BV001_streaming 及 BV002_streaming 外,需要在控制台进行下单(支付 0 元)