rtc_prd/API相关/豆包大模型语音合成API.md
seaislee1209 84243f2be4 feat: TTS语音合成 + 唱片架播放状态 + 气泡持续显示 + 音乐Prompt优化
- 接入豆包TTS V1 WebSocket API,支持故事朗读语音合成
- 新增 PillProgressButton 组件(药丸形进度按钮)
- 新增 TTSService 单例,后台生成不中断
- 音频保存到 Capybara audio/ 目录
- 唱片架当前播放歌曲高亮(金色卡片+音波动效+喇叭图标)
- 播放时气泡持续显示当前歌名,暂停后隐藏
- 音乐总监Prompt去固定模板,歌名不再重复
- 新增 API 参考文档(豆包语音合成)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-10 22:51:26 +08:00

32 KiB
Raw Permalink Blame History

Websocket

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

1. 接口说明

V1: wss://openspeech.bytedance.com/api/v1/tts/ws_binary (V1 单向流式) https://openspeech.bytedance.com/api/v1/tts (V1 http非流式) V3: wss://openspeech.bytedance.com/api/v3/tts/unidirectional/stream (V3 wss单向流式) V3 websocket单向流式文档 wss://openspeech.bytedance.com/api/v3/tts/bidirection (V3 wss双向流式) V3 websocket双向流式文档 https://openspeech.bytedance.com/api/v3/tts/unidirectional (V3 http单向流式) V3 http单向流式文档

:::warning 大模型音色都推荐接入V3接口时延上的表现会更好 :::

2. 身份认证

认证方式使用 Bearer Token在请求的 header 中加上"Authorization": "Bearer; {token}",并在请求的 json 中填入对应的 appid。 :::warning Bearer 和 token 使用分号 ; 分隔,替换时请勿保留{} ::: AppID/Token/Cluster 等信息可参考 控制台使用FAQ-Q1

3. 请求方式

3.1 二进制协议

报文格式(Message format)

![Image](https://lf3-volc-editor.volccdn.com/obj/volcfe/sop-public/upload_cc1c1cdd61bf29f5bde066dc693dcb2b.png =1816x) 所有字段以 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).

4.注意事项

  • 每次合成时reqid这个参数需要重新设置且要保证唯一性建议使用uuid.V4生成
  • websocket demo中单条链接仅支持单次合成若需要合成多次需自行实现。每次创建websocket连接后按顺序串行发送每一包。一次合成结束后可以发送新的合成请求。
  • operation需要设置为submit才是流式返回
  • 在 websocket 握手成功后,会返回这些 Response header
  • 不支持"豆包语音合成模型2.0"的音色,比如:"zh_female_vv_uranus_bigtts"如需使用推荐使用v3 接口

| | | | \

Key 说明 Value 示例
X-Tt-Logid 服务端返回的 logid建议用户获取和打印方便定位问题 202407261553070FACFE6D19421815D605

5.调用示例

return (<Tabs>
<Tabs.TabPane title="Python调用示例" key="buVUUlzaRC"><RenderMd content={`<span id="fccb89b1"></span>
### 前提条件

* 调用之前,您需要获取以下信息:
   * \`<appid>\`使用控制台获取的APP ID可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<access_token>\`使用控制台获取的Access Token可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<voice_type>\`您预期使用的音色ID可参考 [大模型音色列表](https://www.volcengine.com/docs/6561/1257544)。

<span id="824abc9d"></span>
### Python环境

* Python3.9版本及以上。
* Pip25.1.1版本及以上。您可以使用下面命令安装。

\`\`\`Bash
python3 -m pip install --upgrade pip
\`\`\`

<span id="5cbec8af"></span>
### 下载代码示例
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/90fc1f44eaac49f0b4e2cbabdaee8010~tplv-goo7wpa0wc-image.image" name="volcengine_binary_demo.tar.gz" ></Attachment>
<span id="44d95afb"></span>
### 解压缩代码包,安装依赖
\`\`\`Bash
mkdir -p volcengine_binary_demo
tar xvzf volcengine_binary_demo.tar.gz -C ./volcengine_binary_demo
cd volcengine_binary_demo
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip
pip3 install -e .
\`\`\`

<span id="fdf69422"></span>
### 发起调用
> \`<appid>\`替换为您的APP ID。
> \`<access_token>\`替换为您的Access Token。
> \`<voice_type>\`替换为您预期使用的音色ID例如\`zh_female_cancan_mars_bigtts\`。

\`\`\`Bash
python3 examples/volcengine/binary.py --appid <appid> --access_token <access_token> --voice_type <voice_type> --text "你好,我是火山引擎的语音合成服务。这是一个美好的旅程。"
\`\`\`

`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Java调用示例" key="bfjarx0zlZ"><RenderMd content={`<span id="e0bca07e"></span>
### 前提条件

* 调用之前,您需要获取以下信息:
   * \`<appid>\`使用控制台获取的APP ID可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<access_token>\`使用控制台获取的Access Token可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<voice_type>\`您预期使用的音色ID可参考 [大模型音色列表](https://www.volcengine.com/docs/6561/1257544)。

<span id="5f338843"></span>
### Java环境

* Java21版本及以上。
* Maven3.9.10版本及以上。

<span id="96af51fa"></span>
### 下载代码示例
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/ba78519b2dc0459fb7a6935b63775c66~tplv-goo7wpa0wc-image.image" name="volcengine_binary_demo.tar.gz" ></Attachment>
<span id="8e0ecd00"></span>
### 解压缩代码包,安装依赖
\`\`\`Bash
mkdir -p volcengine_binary_demo
tar xvzf volcengine_binary_demo.tar.gz -C ./volcengine_binary_demo
cd volcengine_binary_demo
\`\`\`

<span id="fa0a6230"></span>
### 发起调用
> \`<appid>\`替换为您的APP ID。
> \`<access_token>\`替换为您的Access Token。
> \`<voice_type>\`替换为您预期使用的音色ID例如\`zh_female_cancan_mars_bigtts\`。

\`\`\`Bash
mvn compile exec:java -Dexec.mainClass=com.speech.volcengine.Binary -DappId=<appid> -DaccessToken=<access_token> -Dvoice=<voice_type> -Dtext="**你好**,我是豆包语音助手,很高兴认识你。这是一个愉快的旅程。"
\`\`\`

`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="Go调用示例" key="s8zQJ7cCr3"><RenderMd content={`<span id="2733f4d4"></span>
### 前提条件

* 调用之前,您需要获取以下信息:
   * \`<appid>\`使用控制台获取的APP ID可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<access_token>\`使用控制台获取的Access Token可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<voice_type>\`您预期使用的音色ID可参考 [大模型音色列表](https://www.volcengine.com/docs/6561/1257544)。

<span id="ee9617a6"></span>
### Go环境

* Go1.21.0版本及以上。

<span id="cf9bb2bf"></span>
### 下载代码示例
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/c553a4a4373840d4a4870a1ef2a4e494~tplv-goo7wpa0wc-image.image" name="volcengine_binary_demo.tar.gz" ></Attachment>
<span id="363963c4"></span>
### 解压缩代码包,安装依赖
\`\`\`Bash
mkdir -p volcengine_binary_demo
tar xvzf volcengine_binary_demo.tar.gz -C ./volcengine_binary_demo
cd volcengine_binary_demo
\`\`\`

<span id="f0acb02c"></span>
### 发起调用
> \`<appid>\`替换为您的APP ID。
> \`<access_token>\`替换为您的Access Token。
> \`<voice_type>\`替换为您预期使用的音色ID例如\`zh_female_cancan_mars_bigtts\`。

\`\`\`Bash
go run volcengine/binary/main.go --appid <appid> --access_token <access_token> --voice_type <voice_type> --text "**你好**,我是火山引擎的语音合成服务。"
\`\`\`

`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="C#调用示例" key="Thg5rLaSjq"><RenderMd content={`<span id="c60c1d5f"></span>
### 前提条件

* 调用之前,您需要获取以下信息:
   * \`<appid>\`使用控制台获取的APP ID可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<access_token>\`使用控制台获取的Access Token可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<voice_type>\`您预期使用的音色ID可参考 [大模型音色列表](https://www.volcengine.com/docs/6561/1257544)。

<span id="cf2199fe"></span>
### C#环境

* .Net 9.0版本。

<span id="f7e91692"></span>
### 下载代码示例
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/a95ff3e7604d4bb4ade8fb49e110fef5~tplv-goo7wpa0wc-image.image" name="volcengine_binary_demo.tar.gz" ></Attachment>
<span id="f9131897"></span>
### 解压缩代码包,安装依赖
\`\`\`Bash
mkdir -p volcengine_binary_demo
tar xvzf volcengine_binary_demo.tar.gz -C ./volcengine_binary_demo
cd volcengine_binary_demo
\`\`\`

<span id="5834585b"></span>
### 发起调用
> \`<appid>\`替换为您的APP ID。
> \`<access_token>\`替换为您的Access Token。
> \`<voice_type>\`替换为您预期使用的音色ID例如\`zh_female_cancan_mars_bigtts\`。

\`\`\`Bash
dotnet run --project Volcengine/Binary/Volcengine.Speech.Binary.csproj -- --appid <appid> --access_token <access_token> --voice_type <voice_type> --text "**你好**,这是一个测试文本。我们正在测试文本转语音功能。"
\`\`\`

`}></RenderMd></Tabs.TabPane>
<Tabs.TabPane title="TypeScript调用示例" key="p1GEs3rWU7"><RenderMd content={`<span id="8b865031"></span>
### 前提条件

* 调用之前,您需要获取以下信息:
   * \`<appid>\`使用控制台获取的APP ID可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<access_token>\`使用控制台获取的Access Token可参考 [控制台使用FAQ-Q1](https://www.volcengine.com/docs/6561/196768#q1%EF%BC%9A%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%88%B0%E4%BB%A5%E4%B8%8B%E5%8F%82%E6%95%B0appid%EF%BC%8Ccluster%EF%BC%8Ctoken%EF%BC%8Cauthorization-type%EF%BC%8Csecret-key-%EF%BC%9F)。
   * \`<voice_type>\`您预期使用的音色ID可参考 [大模型音色列表](https://www.volcengine.com/docs/6561/1257544)。

<span id="e7697c4e"></span>
### node环境

* nodev24.0版本及以上。

<span id="03fe45f1"></span>
### 下载代码示例
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/12ef1b1188a84f0c8883a0114da741ad~tplv-goo7wpa0wc-image.image" name="volcengine_binary_demo.tar.gz" ></Attachment>
<span id="13e8a71a"></span>
### 解压缩代码包,安装依赖
\`\`\`Bash
mkdir -p volcengine_binary_demo
tar xvzf volcengine_binary_demo.tar.gz -C ./volcengine_binary_demo
cd volcengine_binary_demo
npm install
npm install -g typescript
npm install -g ts-node
\`\`\`

<span id="0c57973f"></span>
### 发起调用
> \`<appid>\`替换为您的APP ID。
> \`<access_token>\`替换为您的Access Token。
> \`<voice_type>\`替换为您预期使用的音色ID例如\`<voice_type>\`。

\`\`\`Bash
npx ts-node src/volcengine/binary.ts --appid <appid> --access_token <access_token> --voice_type <voice_type> --text "**你好**,我是火山引擎的语音合成服务。"
\`\`\`

`}></RenderMd></Tabs.TabPane></Tabs>);

HTTP

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

1. 接口说明

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

2. 身份认证

认证方式采用 Bearer Token. 1)需要在请求的 Header 中填入"Authorization":"Bearer;${token}" :::warning Bearer 和 token 使用分号 ; 分隔,替换时请勿保留${} ::: AppID/Token/Cluster 等信息可参考 控制台使用FAQ-Q1

3. 注意事项

  • 使用 HTTP Post 方式进行请求,返回的结果为 JSON 格式,需要进行解析
  • 因 json 格式无法直接携带二进制音频,音频经 base64 编码。使用 base64 解码后,即为二进制音频
  • 每次合成时 reqid 这个参数需要重新设置,且要保证唯一性(建议使用 UUID/GUID 等生成)
  • 不支持"豆包语音合成模型2.0"的音色,比如:"zh_female_vv_uranus_bigtts"如需使用推荐使用v3 接口

参数列表

Websocket 与 Http 调用参数相同

请求参数

| | | | | | | \

字段 含义 层级 格式 必需 备注
app 应用相关配置 1 dict
appid 应用标识 2 string 需要申请
token 应用令牌 2 string 无实际鉴权作用的Fake token可传任意非空字符串
cluster 业务集群 2 string volcano_tts
user 用户相关配置 1 dict
uid 用户标识 2 string 可传任意非空字符串,传入值可以通过服务端日志追溯
audio 音频相关配置 1 dict
voice_type 音色类型 2 string
emotion 音色情感 2 string 设置音色的情感。示例:"emotion": "angry"
注:当前仅部分音色支持设置情感,且不同音色支持的情感范围存在不同。
详见:大模型语音合成API-音色列表-多情感音色
enable_emotion 开启音色情感 2 bool 是否可以设置音色情感需将enable_emotion设为true
示例:"enable_emotion": True
emotion_scale 情绪值设置 2 float 调用emotion设置情感参数后可使用emotion_scale进一步设置情绪值范围1~5不设置时默认值为4。
理论上情绪值越大情感越明显。但情绪值1~5实际为非线性增长可能存在超过某个值后情绪增加不明显例如设置3和5时情绪值可能接近。
encoding 音频编码格式 2 string wav / pcm / ogg_opus / mp3默认为 pcm
注意wav 不支持流式
speed_ratio 语速 2 float [0.1,2],默认为 1通常保留一位小数即可
rate 音频采样率 2 int 默认为 24000可选800016000
bitrate 比特率 2 int 单位 kb/s默认160 kb/s
注:
bitrate只针对MP3格式wav计算比特率跟pcm一样是 比特率 (bps) = 采样率 × 位深度 × 声道数
目前大模型TTS只能改采样率所以对于wav格式来说只能通过改采样率来变更音频的比特率
explicit_language 明确语种 2 string 仅读指定语种的文本
精品音色和 ICL 声音复刻场景:
* 不给定参数,正常中英混
* crosslingual 启用多语种前端(包含zh/en/ja/es-ms/id/pt-br
* zh-cn 中文为主,支持中英混
* en 仅英文
* ja 仅日文
* es-mx 仅墨西
* id 仅印尼
* pt-br 仅巴葡
DIT 声音复刻场景:
当音色是使用model_type=2训练的即采用dit标准版效果时建议指定明确语种目前支持
* 不给定参数,启用多语种前端zh,en,ja,es-mx,id,pt-br,de,fr
* zh,en,ja,es-mx,id,pt-br,de,fr 启用多语种前端
* zh-cn 中文为主,支持中英混
* en 仅英文
* ja 仅日文
* es-mx 仅墨西
* id 仅印尼
* pt-br 仅巴葡
* de 仅德语
* fr 仅法语
当音色是使用model_type=3训练的即采用dit还原版效果时必须指定明确语种目前支持
* 不给定参数,正常中英混
* zh-cn 中文为主,支持中英混
* en 仅英文
context_language 参考语种 2 string 给模型提供参考的语种
* 不给定 西欧语种采用英语
* id 西欧语种采用印尼
* es 西欧语种采用墨西
* pt 西欧语种采用巴葡
loudness_ratio 音量调节 2 float [0.5,2]默认为1通常保留一位小数即可。0.5代表原音量0.5倍2代表原音量2倍
request 请求相关配置 1 dict
reqid 请求标识 2 string 需要保证每次调用传入值唯一,建议使用 UUID
text 文本 2 string 合成语音的文本,长度限制 1024 字节UTF-8 编码建议小于300字符超出容易增加badcase出现概率或报错
model 模型版本 \
2 \
string 模型版本,传seed-tts-1.1较默认版本音质有提升,并且延时更优,不传为默认效果。
若使用1.1模型效果在复刻场景中会放大训练音频prompt特质因此对prompt的要求更高使用高质量的训练音频可以获得更优的音质效果。
text_type 文本类型 2 string 使用 ssml 时需要指定,值为"ssml"
silence_duration 句尾静音 2 float 设置该参数可在句尾增加静音时长范围0~30000ms。增加的句尾静音主要针对传入文本最后的句尾而非每句话的句尾若启用该参数必须在request下首先设置enable_trailing_silence_audio = true
with_timestamp 时间戳相关 2 int \
string 传入1时表示启用将返回TN后文本的时间戳例如2025。根据语义TN后文本为“两千零二十五”或“二零二五”。
注:原文本中的多个标点连用或者空格仍会被处理,但不影响时间戳的连贯性(仅限大模型场景使用)。
附加说明(小模型和大模型时间戳原理差异):
1. 小模型依据前端模型生成时间戳然后合成音频。在处理时间戳时TN前后文本进行了映射所以小模型可返回TN前原文本的时间戳即保留原文中的阿拉伯数字或者特殊符号等。
2. 大模型在对传入文本语义理解后合成音频再针对合成音频进行TN后打轴以输出时间戳。若不采用TN后文本输出的时间戳将与合成音频无法对齐所以大模型返回的时间戳对应TN后的文本。
operation 操作 2 string query非流式http 只能 query / submit流式
extra_param 附加参数 2 jsonstring
disable_markdown_filter 3 bool 是否开启markdown解析过滤
为true时解析并过滤markdown语法例如你好,会读为“你好”,
为false时不解析不过滤例如你好,会读为“星星‘你好’星星”
示例:"disable_markdown_filter": True
enable_latex_tn 3 bool 是否可以播报latex公式需将disable_markdown_filter设为true
示例:"enable_latex_tn": True
mute_cut_remain_ms 句首静音参数 3 string 该参数需配合mute_cut_threshold参数一起使用其中
"mute_cut_threshold": "400", // 静音判断的阈值(音量小于该值时判定为静音)
"mute_cut_remain_ms": "50", // 需要保留的静音长度
参数和value都为string格式
以python为示例
```Python
"extra_param":("{"mute_cut_threshold":"400", "mute_cut_remain_ms": "0"}")
```
特别提醒:
* 因MP3格式的特殊性句首始终会存在100ms内的静音无法消除WAV格式的音频句首静音可全部消除建议依照自身业务需求综合判断选择
disable_emoji_filter emoji不过滤显示 3 bool 开启emoji表情在文本中不过滤显示默认为False建议搭配时间戳参数一起使用。
Python示例"extra_param": json.dumps({"disable_emoji_filter": True})
unsupported_char_ratio_thresh 不支持语种占比阈值 3 float 默认: 0.3,最大值: 1.0
检测出不支持合成的文本超过设置的比例,则会返回错误。
Python示例"extra_param": json.dumps({"unsupported_char_ratio_thresh": 0.3})
aigc_watermark 是否在合成结尾增加音频节奏标识 3 bool 默认: false
Python示例"extra_param": json.dumps({"aigc_watermark": True})
cache_config 缓存相关参数 3 dict 开启缓存开启后合成相同文本时服务会直接读取缓存返回上一次合成该文本的音频可明显加快相同文本的合成速率缓存数据保留时间1小时。
(通过缓存返回的数据不会附带时间戳)
Python示例"extra_param": json.dumps({"cache_config": {"text_type": 1,"use_cache": True}})
text_type 缓存相关参数 4 int 和use_cache参数一起使用需要开启缓存时传1
use_cache 缓存相关参数 4 bool 和text_type参数一起使用需要开启缓存时传true

备注:

  1. 已支持字级别时间戳能力ssml文本类型不支持
  2. ssml 能力已支持,详见 SSML 标记语言--豆包语音-火山引擎 (volcengine.com)
  3. 暂时不支持音高调节
  4. 大模型音色语种支持中英混
  5. 大模型非双向流式已支持latex公式
  6. 在 websocket/http 握手成功后,会返回这些 Response header

| | | | \

Key 说明 Value 示例
X-Tt-Logid 服务端返回的 logid建议用户获取和打印方便定位问题使用默认格式即可不要自定义格式 202407261553070FACFE6D19421815D605

请求示例:

{
    "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 元)