@xdfnet/ispeak 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Docs/ARCHITECTURE.md +177 -0
- package/Docs/HTTP Chunked:SSE/345/215/225/345/220/221/346/265/201/345/274/217-V3.md" +896 -0
- package/Docs//345/243/260/351/237/263/345/244/215/345/210/273API-V3.md +873 -0
- package/Docs//351/237/263/350/211/262/345/210/227/350/241/250.md +998 -0
- package/LICENSE +21 -0
- package/README.md +194 -0
- package/configs/com.iSpeak.plist +20 -0
- package/configs/config.example.json +18 -0
- package/configs/hook-speak.sh +76 -0
- package/go.mod +5 -0
- package/go.sum +4 -0
- package/main.go +858 -0
- package/npm/postinstall.js +134 -0
- package/package.json +46 -0
- package/scripts/ispeak +58 -0
|
@@ -0,0 +1,896 @@
|
|
|
1
|
+
<span id="81eaafc0"></span>
|
|
2
|
+
# 语音合成大模型API列表
|
|
3
|
+
根据具体场景选择合适的语音合成大模型API。
|
|
4
|
+
|
|
5
|
+
| | | | | \
|
|
6
|
+
|**接口** |**推荐场景** |**接口功能** |**文档链接** |
|
|
7
|
+
|---|---|---|---|
|
|
8
|
+
| | | | | \
|
|
9
|
+
|`wss://openspeech.bytedance.com/api/v3/tts/bidirection ` |WebSocket协议,实时交互场景,支持文本实时流式输入,流式输出音频。 |语音合成、声音复刻、混音 |[V3 WebSocket双向流式文档](https://www.volcengine.com/docs/6561/1329505) |
|
|
10
|
+
| | | | | \
|
|
11
|
+
|`wss://openspeech.bytedance.com/api/v3/tts/unidirectional/stream` |WebSocket协议,一次性输入合成文本,流式输出音频。 |语音合成、声音复刻、混音 |[V3 WebSocket单向流式文档](https://www.volcengine.com/docs/6561/1719100) |
|
|
12
|
+
| | | | | \
|
|
13
|
+
|`https://openspeech.bytedance.com/api/v3/tts/unidirectional ` |HTTP Chunked协议,一次性输入全部合成文本,流式输出音频。 |语音合成、声音复刻、混音 |[V3 HTTP Chunked单向流式文档](https://www.volcengine.com/docs/6561/1598757?lang=zh#_2-http-chunked%E6%A0%BC%E5%BC%8F%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E) |
|
|
14
|
+
| | | | | \
|
|
15
|
+
|`https://openspeech.bytedance.com/api/v3/tts/unidirectional/sse` |HTTP SSE协议,一次性输入全部合成文本,流式输出音频。 |语音合成、声音复刻、混音 |[V3 Server Sent Events(SSE)单向流式文档](https://www.volcengine.com/docs/6561/1598757?lang=zh#_3-sse%E6%A0%BC%E5%BC%8F%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E) |
|
|
16
|
+
|
|
17
|
+
<span id="d7a28c45"></span>
|
|
18
|
+
# 1 接口功能
|
|
19
|
+
单向流式API为用户提供文本转语音的能力,支持多语种、多方言,同时支持http协议流式输出。
|
|
20
|
+
<span id="27edde0a"></span>
|
|
21
|
+
## 1.1最佳实践
|
|
22
|
+
|
|
23
|
+
* 客户端读取服务端流式返回的json数据,从中取出对应的音频数据;
|
|
24
|
+
* 音频数据返回的是base64格式,需要解析后拼接到字节数组即可组装音频进行播放;
|
|
25
|
+
* 可以使用对应编程语言的连接复用组件,避免重复建立tcp连接(火山服务端keep-alive时间为1分钟),例如python的session组件:
|
|
26
|
+
|
|
27
|
+
```JSON
|
|
28
|
+
session = requests.Session()
|
|
29
|
+
response = session.post(url, headers=headers, json=payload, stream=True)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
<span id="14358605"></span>
|
|
34
|
+
# 2 HTTP Chunked格式接口说明
|
|
35
|
+
<span id="5495b4ca"></span>
|
|
36
|
+
## 2.1 请求Request
|
|
37
|
+
<span id="f38e3780"></span>
|
|
38
|
+
### 请求路径
|
|
39
|
+
|
|
40
|
+
* 服务对应的请求路径:`https://openspeech.bytedance.com/api/v3/tts/unidirectional`
|
|
41
|
+
|
|
42
|
+
<span id="1b6e0bd5"></span>
|
|
43
|
+
### 鉴权Request Headers
|
|
44
|
+
使用[新版控制台](https://console.volcengine.com/speech/new)时,推荐采用以下更简化的鉴权方式。
|
|
45
|
+
|
|
46
|
+
| | | | | | \
|
|
47
|
+
|Key |说明 |参数类型 |是否必须 |Value示例 |
|
|
48
|
+
|---|---|---|---|---|
|
|
49
|
+
| | | | | | \
|
|
50
|
+
|X-Api-Key |使用火山引擎控制台获取的API Key,可参考 [控制台API Key管理](https://www.volcengine.com/docs/6561/2119699?lang=zh#ew1HctnP) |string |必须 |"your-api-key" |
|
|
51
|
+
| | | | | | \
|
|
52
|
+
|X-Api-Resource-Id |\
|
|
53
|
+
| |表示调用服务的资源信息 ID,可以用来选择不同的模型版本效果,也决定了计费方式。 |\
|
|
54
|
+
| | |string |必须 |**豆包语音合成大模型** |\
|
|
55
|
+
| | | | |语音合成接口通过 `X-Api-Resource-Id` 参数来选择不同的版本效果: |\
|
|
56
|
+
| | | | | |\
|
|
57
|
+
| | | | |* `seed-tts-2.0`仅支持调用["豆包语音合成模型2.0"的音色](https://www.volcengine.com/docs/6561/1257544?lang=zh#%E8%B1%86%E5%8C%85%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E6%A8%A1%E5%9E%8B2-0-%E9%9F%B3%E8%89%B2%E5%88%97%E8%A1%A8) |\
|
|
58
|
+
| | | | |* `seed-tts-1.0` / `seed-tts-1.0-concurr`仅支持调用["豆包语音合成模型1.0"的音色](https://www.volcengine.com/docs/6561/1257544?lang=zh#%E8%B1%86%E5%8C%85%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E6%A8%A1%E5%9E%8B1-0-%E9%9F%B3%E8%89%B2%E5%88%97%E8%A1%A8) |\
|
|
59
|
+
| | | | | |\
|
|
60
|
+
| | | | |同时,`X-Api-Resource-Id` 也决定了计费方式: |\
|
|
61
|
+
| | | | | |\
|
|
62
|
+
| | | | |* `seed-tts-2.0`:对应计费商品为 “语音合成2.0字符版“ |\
|
|
63
|
+
| | | | |* `seed-tts-1.0`:对应计费商品为“语音合成1.0字符版” |\
|
|
64
|
+
| | | | |* `seed-tts-1.0-concurr`:对应计费商品为“语音合成1.0并发版“ |\
|
|
65
|
+
| | | | | |\
|
|
66
|
+
| | | | |**豆包声音复刻大模型** |\
|
|
67
|
+
| | | | |语音合成接口通过 `X-Api-Resource-Id` 参数来选择不同的版本效果: |\
|
|
68
|
+
| | | | | |\
|
|
69
|
+
| | | | |* `seed-icl-2.0`:对应声音复刻2.0 版本效果 |\
|
|
70
|
+
| | | | |* `seed-icl-1.0` / `seed-icl-1.0-concurr`:对应声音复刻1.0 版本效果 |\
|
|
71
|
+
| | | | | |\
|
|
72
|
+
| | | | |同时,`X-Api-Resource-Id` 也决定了计费方式: |\
|
|
73
|
+
| | | | | |\
|
|
74
|
+
| | | | |* `seed-icl-2.0`:对应计费商品为“声音复刻2.0 字符版” |\
|
|
75
|
+
| | | | |* `seed-icl-1.0`:对应计费商品为“声音复刻1.0 字符版” |\
|
|
76
|
+
| | | | |* `seed-icl-1.0-concurr`:对应计费商品为“声音复刻1.0 并发版” |
|
|
77
|
+
| | | | | | \
|
|
78
|
+
|X-Api-Request-Id |标识客户端请求ID,uuid随机字符串 |string |可选 |“67ee89ba-7050-4c04-a3d7-ac61a63499b3” |
|
|
79
|
+
|
|
80
|
+
```Python
|
|
81
|
+
headers = {
|
|
82
|
+
"X-Api-Key": "your-api-key",
|
|
83
|
+
"X-Api-Resource-Id": "seed-tts-2.0"
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
若使用[旧版控制台](https://console.volcengine.com/speech/app),鉴权方式如下。建议尽快切换至新版,以体验更便捷的鉴权流程。
|
|
88
|
+
|
|
89
|
+
| | | | | | \
|
|
90
|
+
|Key |说明 |参数类型 |是否必须 |Value示例 |
|
|
91
|
+
|---|---|---|---|---|
|
|
92
|
+
| | | | | | \
|
|
93
|
+
|X-Api-App-Id |\
|
|
94
|
+
| |使用火山引擎控制台获取的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)(旧版控制台使用,新版控制台只需要X-Api-Key即可) |string |必须 |\
|
|
95
|
+
| | | | |“123456789” |\
|
|
96
|
+
| | | | | |
|
|
97
|
+
| | | | | | \
|
|
98
|
+
|X-Api-Access-Key |\
|
|
99
|
+
| |使用火山引擎控制台获取的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)(旧版控制台使用,新版控制台只需要X-Api-Key即可) |string |必须 |\
|
|
100
|
+
| | | | |“your-access-key” |\
|
|
101
|
+
| | | | | |
|
|
102
|
+
| | | | | | \
|
|
103
|
+
|X-Api-Resource-Id |\
|
|
104
|
+
| |表示调用服务的资源信息 ID,可以用来选择不同的模型版本效果,也决定了计费方式。 |\
|
|
105
|
+
| | |string |必须 |\
|
|
106
|
+
| | | | |**豆包语音合成大模型** |\
|
|
107
|
+
| | | | |语音合成接口通过 `X-Api-Resource-Id` 参数来选择不同的版本效果: |\
|
|
108
|
+
| | | | | |\
|
|
109
|
+
| | | | |* `seed-tts-2.0`仅支持调用["豆包语音合成模型2.0"的音色](https://www.volcengine.com/docs/6561/1257544?lang=zh#%E8%B1%86%E5%8C%85%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E6%A8%A1%E5%9E%8B2-0-%E9%9F%B3%E8%89%B2%E5%88%97%E8%A1%A8) |\
|
|
110
|
+
| | | | |* `seed-tts-1.0` / `seed-tts-1.0-concurr`仅支持调用["豆包语音合成模型1.0"的音色](https://www.volcengine.com/docs/6561/1257544?lang=zh#%E8%B1%86%E5%8C%85%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E6%A8%A1%E5%9E%8B1-0-%E9%9F%B3%E8%89%B2%E5%88%97%E8%A1%A8) |\
|
|
111
|
+
| | | | | |\
|
|
112
|
+
| | | | |同时,`X-Api-Resource-Id` 也决定了计费方式: |\
|
|
113
|
+
| | | | | |\
|
|
114
|
+
| | | | |* `seed-tts-2.0`:对应计费商品为 “语音合成2.0字符版“ |\
|
|
115
|
+
| | | | |* `seed-tts-1.0`:对应计费商品为“语音合成1.0字符版” |\
|
|
116
|
+
| | | | |* `seed-tts-1.0-concurr`:对应计费商品为“语音合成1.0并发版“ |\
|
|
117
|
+
| | | | | |\
|
|
118
|
+
| | | | |**豆包声音复刻大模型** |\
|
|
119
|
+
| | | | |语音合成接口通过 `X-Api-Resource-Id` 参数来选择不同的版本效果: |\
|
|
120
|
+
| | | | | |\
|
|
121
|
+
| | | | |* `seed-icl-2.0`:对应声音复刻2.0 版本效果 |\
|
|
122
|
+
| | | | |* `seed-icl-1.0` / `seed-icl-1.0-concurr`:对应声音复刻1.0 版本效果 |\
|
|
123
|
+
| | | | | |\
|
|
124
|
+
| | | | |同时,`X-Api-Resource-Id` 也决定了计费方式: |\
|
|
125
|
+
| | | | | |\
|
|
126
|
+
| | | | |* `seed-icl-2.0`:对应计费商品为“声音复刻2.0 字符版” |\
|
|
127
|
+
| | | | |* `seed-icl-1.0`:对应计费商品为“声音复刻1.0 字符版” |\
|
|
128
|
+
| | | | |* `seed-icl-1.0-concurr`:对应计费商品为“声音复刻1.0 并发版” |
|
|
129
|
+
| | | | | | \
|
|
130
|
+
|X-Api-Request-Id |标识客户端请求ID,uuid随机字符串 |string |可选 |“67ee89ba-7050-4c04-a3d7-ac61a63499b3” |
|
|
131
|
+
|
|
132
|
+
```Python
|
|
133
|
+
headers = {
|
|
134
|
+
"X-Api-App-Id": "123456789",
|
|
135
|
+
"X-Api-Access-Key": "your-access-key",
|
|
136
|
+
"X-Api-Resource-Id": "seed-tts-2.0"
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
<span id="defbeb7a"></span>
|
|
141
|
+
### 额外Request Headers
|
|
142
|
+
|
|
143
|
+
| | | | | \
|
|
144
|
+
|Key |说明 |是否必须 |Value示例 |
|
|
145
|
+
|---|---|---|---|
|
|
146
|
+
| | | | | \
|
|
147
|
+
|X-Control-Require-Usage-Tokens-Return |请求消耗的用量返回控制标记。当携带此字段,在合成音频结束时的返回数据中会多一个usage的JSON Object字段,其中包含了所需的用量数据。 |否 |* 设置为*,表示返回已支持的用量数据。 |\
|
|
148
|
+
| | | |* 也设置为具体的用量数据标记,如text_words;多个用逗号分隔 |\
|
|
149
|
+
| | | |* 当前已支持的用量数据 |\
|
|
150
|
+
| | | | * text_words,表示计费字符数 |
|
|
151
|
+
|
|
152
|
+
<span id="bf142291"></span>
|
|
153
|
+
### Response Headers
|
|
154
|
+
|
|
155
|
+
| | | | \
|
|
156
|
+
|Key |说明 |Value示例 |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| | | | \
|
|
159
|
+
|Transfer-Encoding |返回的传输编码,一般为chunked |chunked |
|
|
160
|
+
| | | | \
|
|
161
|
+
|X-Tt-Logid |服务端返回的 logid,建议用户获取和打印方便定位问题 |2025041513355271DF5CF1A0AE0508E78C |
|
|
162
|
+
|
|
163
|
+
<span id="1aa30415"></span>
|
|
164
|
+
## 2.2 请求Body
|
|
165
|
+
|
|
166
|
+
| | | | | | \
|
|
167
|
+
|字段 |描述 |是否必须 |类型 |默认值 |
|
|
168
|
+
|---|---|---|---|---|
|
|
169
|
+
| | | | | | \
|
|
170
|
+
|user |用户信息 | | | |
|
|
171
|
+
| | | | | | \
|
|
172
|
+
|user.uid |用户uid | | | |
|
|
173
|
+
| | | | | | \
|
|
174
|
+
|namespace |请求方法 | |string |BidirectionalTTS |
|
|
175
|
+
| | | | | | \
|
|
176
|
+
|req_params.text |输入文本 | |string | |
|
|
177
|
+
| | | | | | \
|
|
178
|
+
|req_params.model |\
|
|
179
|
+
| |模型版本,传`seed-tts-1.1`较默认版本音质有提升,并且延时更优,不传为默认效果。 |\
|
|
180
|
+
| |注:若使用1.1模型效果,在复刻场景中会放大训练音频prompt特质,因此对prompt的要求更高,使用高质量的训练音频,可以获得更优的音质效果。 |\
|
|
181
|
+
| | |\
|
|
182
|
+
| |以下参数仅针对声音复刻2.0的音色生效,即音色ID的前缀为`saturn_`的音色。音色的取值为以下两种: |\
|
|
183
|
+
| | |\
|
|
184
|
+
| |* `seed-tts-2.0-expressive`:表现力较强,支持QA和Cot能力,不过可能存在抽卡的情况。 |\
|
|
185
|
+
| |* `seed-tts-2.0-standard`:表现力上更加稳定,但是不支持QA和Cot能力。如果此时使用QA或Cot能力,则拒绝请求。 |\
|
|
186
|
+
| |* 如果不传model参数,默认使用`seed-tts-2.0-expressive`模型。 | |string |\
|
|
187
|
+
| | | | | |
|
|
188
|
+
| | | | | | \
|
|
189
|
+
|req_params.ssml |* 当文本格式是ssml时,需要将文本赋值为ssml,此时文本处理的优先级高于text。ssml和text字段,至少有一个不为空 |\
|
|
190
|
+
| |* ["豆包语音合成模型2.0"的音色](https://www.volcengine.com/docs/6561/1257544) 暂不支持 |\
|
|
191
|
+
| |* 豆包声音复刻模型2.0(icl 2.0)的音色暂不支持 | |string | |
|
|
192
|
+
| | | | | | \
|
|
193
|
+
|req_params.speaker |发音人,具体见[发音人列表](https://www.volcengine.com/docs/6561/1257544) |√ |string | |
|
|
194
|
+
| | | | | | \
|
|
195
|
+
|req_params.audio_params |音频参数,便于服务节省音频解码耗时 |√ |object | |
|
|
196
|
+
| | | | | | \
|
|
197
|
+
|req_params.audio_params.format |音频编码格式,mp3/ogg_opus/pcm。<span style="background-color: rgba(255,246,122, 0.8)">接口传入wav并不会报错,在流式场景下传入wav会多次返回wav header,这种场景建议使用pcm。</span> | |string |mp3 |
|
|
198
|
+
| | | | | | \
|
|
199
|
+
|req_params.audio_params.sample_rate |音频采样率,可选值 [8000,16000,22050,24000,32000,44100,48000] | |number |24000 |
|
|
200
|
+
| | | | | | \
|
|
201
|
+
|req_params.audio_params.bit_rate |音频比特率,可传16000、32000等。 |\
|
|
202
|
+
| |bit_rate默认设置范围为64k~160k,传了disable_default_bit_rate为true后可以设置到64k以下 |\
|
|
203
|
+
| |GoLang示例:`additions = fmt.Sprintf("{"disable_default_bit_rate":true}")` |\
|
|
204
|
+
| |**注:**bit_rate只针对MP3格式,wav计算比特率跟pcm一样是 比特率 (bps) = 采样率 × 位深度 × 声道数 |\
|
|
205
|
+
| |目前大模型TTS只能改采样率,所以对于wav格式来说只能通过改采样率来变更音频的比特率 | |number | |
|
|
206
|
+
| | | | | | \
|
|
207
|
+
|req_params.audio_params.emotion |设置音色的情感。示例:"emotion": "angry" |\
|
|
208
|
+
| |注:当前仅部分音色支持设置情感,且不同音色支持的情感范围存在不同。 |\
|
|
209
|
+
| |详见:[大模型语音合成API-音色列表-多情感音色](https://www.volcengine.com/docs/6561/1257544) | |string | |
|
|
210
|
+
| | | | | | \
|
|
211
|
+
|req_params.audio_params.emotion_scale |调用emotion设置情感参数后可使用emotion_scale进一步设置情绪值,范围1~5,不设置时默认值为4。 |\
|
|
212
|
+
| |注:理论上情绪值越大,情感越明显。但情绪值1~5实际为非线性增长,可能存在超过某个值后,情绪增加不明显,例如设置3和5时情绪值可能接近。 | |number |4 |
|
|
213
|
+
| | | | | | \
|
|
214
|
+
|req_params.audio_params.speech_rate |语速,取值范围[-50,100],100代表2.0倍速,-50代表0.5倍数 | |number |0 |
|
|
215
|
+
| | | | | | \
|
|
216
|
+
|req_params.audio_params.loudness_rate |音量,取值范围[-50,100],100代表2.0倍音量,-50代表0.5倍音量(mix音色暂不支持) | |number |0 |
|
|
217
|
+
| | | | | | \
|
|
218
|
+
|req_params.audio_params.enable_timestamp |\
|
|
219
|
+
|([仅TTS1.0支持](https://www.volcengine.com/docs/6561/1257544)) |设置 "enable_timestamp": true 返回句级别字的时间戳(默认为 false,参数传入 true 即表示启用) |\
|
|
220
|
+
| |开启后,在原有返回的事件`event=TTSSentenceEnd`中,新增该子句的时间戳信息。 |\
|
|
221
|
+
| | |\
|
|
222
|
+
| |* 一个子句的时间戳返回之后才会开始返回下一句音频。 |\
|
|
223
|
+
| |* 合成有多个子句会多次返回`TTSSentenceStart`和`TTSSentenceEnd`。开启字幕后字幕跟随`TTSSentenceEnd`返回。 |\
|
|
224
|
+
| |* 字/词粒度的时间戳,其中字/词是tn。具体可以看下面的例子。 |\
|
|
225
|
+
| |* 支持中、英,其他语种、方言暂时不支持。 |\
|
|
226
|
+
| | |\
|
|
227
|
+
| |注:该字段仅适用于["豆包语音合成模型1.0"的音色](https://www.volcengine.com/docs/6561/1257544) | |bool |false |
|
|
228
|
+
| | | | | | \
|
|
229
|
+
|req_params.audio_params.enable_subtitle |设置 "enable_subtitle": true 返回句级别字的时间戳(默认为 false,参数传入 true 即表示启用) |\
|
|
230
|
+
| |开启后,新增返回事件`event=TTSSubtitle`,包含字幕信息。 |\
|
|
231
|
+
| | |\
|
|
232
|
+
| |* 在一句音频合成之后,不会立即返回该句的字幕。合成进度不会被字幕识别阻塞,当一句的字幕识别完成后立即返回。可能一个子句的字幕返回的时候,已经返回下一句的音频帧给调用方了。 |\
|
|
233
|
+
| |* 合成有多个子句,仅返回一次`TTSSentenceStart`和`TTSSentenceEnd`。开启字幕后会多次返回`TTSSubtitle`。 |\
|
|
234
|
+
| |* 字/词粒度的时间戳,其中字/词是原文。具体可以看下面的例子。 |\
|
|
235
|
+
| |* 支持中、英,其他语种、方言暂时不支持; |\
|
|
236
|
+
| |* latex公式不支持 |\
|
|
237
|
+
| | * req_params.additions.enable_latex_tn为true时,不开启字幕识别功能,即不返回字幕; |\
|
|
238
|
+
| |* ssml不支持 |\
|
|
239
|
+
| | * req_params.ssml 不传时,不开启字幕识别功能,即不返回字幕; |\
|
|
240
|
+
| | |\
|
|
241
|
+
| |注:该参数只在TTS2.0、ICL2.0生效。 | |bool |false |
|
|
242
|
+
| | | | | | \
|
|
243
|
+
|req_params.additions |用户自定义参数 | |jsonstring | |
|
|
244
|
+
| | | | | | \
|
|
245
|
+
|req_params.additions.silence_duration |设置该参数可在句尾增加静音时长,范围0~30000ms。(注:增加的句尾静音主要针对传入文本最后的句尾,而非每句话的句尾) | |number |0 |
|
|
246
|
+
| | | | | | \
|
|
247
|
+
|req_params.additions.enable_language_detector |自动识别语种 | |bool |false |
|
|
248
|
+
| | | | | | \
|
|
249
|
+
|req_params.additions.disable_markdown_filter |是否开启markdown解析过滤, |\
|
|
250
|
+
| |为true时,解析并过滤markdown语法,例如,`**你好**`,会读为“你好”, |\
|
|
251
|
+
| |为false时,不解析不过滤,例如,`**你好**`,会读为“星星‘你好’星星” | |bool |false |
|
|
252
|
+
| | | | | | \
|
|
253
|
+
|req_params.additions.disable_emoji_filter |开启emoji表情在文本中不过滤显示,默认为false,建议搭配时间戳参数一起使用。 |\
|
|
254
|
+
| |GoLang示例:`additions = fmt.Sprintf("{"disable_emoji_filter":true}")` | |bool |false |
|
|
255
|
+
| | | | | | \
|
|
256
|
+
|req_params.additions.mute_cut_remain_ms |该参数需配合mute_cut_threshold参数一起使用,其中: |\
|
|
257
|
+
| |"mute_cut_threshold": "400", // 静音判断的阈值(音量小于该值时判定为静音) |\
|
|
258
|
+
| |"mute_cut_remain_ms": "50", // 需要保留的静音长度 |\
|
|
259
|
+
| |注:参数和value都为string格式 |\
|
|
260
|
+
| |Golang示例:`additions = fmt.Sprintf("{"mute_cut_threshold":"400", "mute_cut_remain_ms": "1"}")` |\
|
|
261
|
+
| |**特别提醒:** |\
|
|
262
|
+
| | |\
|
|
263
|
+
| |* 因MP3格式的特殊性,句首始终会存在100ms内的静音无法消除,WAV格式的音频句首静音可全部消除,建议依照自身业务需求综合判断选择 |\
|
|
264
|
+
| |* ["豆包语音合成模型2.0"的音色](https://www.volcengine.com/docs/6561/1257544) 暂不支持 |\
|
|
265
|
+
| |* 豆包声音复刻模型2.0(icl 2.0)的音色暂不支持 | |string | |
|
|
266
|
+
| | | | | | \
|
|
267
|
+
|req_params.additions.enable_latex_tn |是否可以播报latex公式,需将disable_markdown_filter设为true | |bool |false |
|
|
268
|
+
| | | | | | \
|
|
269
|
+
|req_params.additions.latex_parser |是否使用lid 能力播报latex公式,相较于latex_tn 效果更好; |\
|
|
270
|
+
| |值为“v2”时支持lid能力解析公式,值为“”时不支持lid; |\
|
|
271
|
+
| |需同时将disable_markdown_filter设为true; | |string | |
|
|
272
|
+
| | | | | | \
|
|
273
|
+
|req_params.additions.max_length_to_filter_parenthesis |是否过滤括号内的部分,0为不过滤,100为过滤 | |int |100 |
|
|
274
|
+
| | | | | | \
|
|
275
|
+
|req_params.additions.explicit_language(明确语种) |仅读指定语种的文本 |\
|
|
276
|
+
| |**语音合成 1.0 音色** |\
|
|
277
|
+
| | |\
|
|
278
|
+
| |* 根据音色列表中音色的支持范围指定对应语种 |\
|
|
279
|
+
| |* 不给定参数,正常中英混 |\
|
|
280
|
+
| | |\
|
|
281
|
+
| |**声音复刻ICL1.0场景:** |\
|
|
282
|
+
| | |\
|
|
283
|
+
| |* 不给定参数,正常中英混 |\
|
|
284
|
+
| |* `crosslingual` 启用多语种前端(包含`zh/en/ja/es-mx/id/pt-br`) |\
|
|
285
|
+
| |* `zh-cn` 中文为主,支持中英混 |\
|
|
286
|
+
| |* `en` 仅英文 |\
|
|
287
|
+
| |* `ja` 仅日文 |\
|
|
288
|
+
| |* `es-mx` 仅墨西 |\
|
|
289
|
+
| |* `id` 仅印尼 |\
|
|
290
|
+
| |* `pt-br` 仅巴葡 |\
|
|
291
|
+
| | |\
|
|
292
|
+
| |**DIT 声音复刻场景:** |\
|
|
293
|
+
| |当音色是使用model_type=2训练的,即采用dit标准版效果时,建议指定明确语种,目前支持: |\
|
|
294
|
+
| | |\
|
|
295
|
+
| |* 不给定参数,启用多语种前端`zh,en,ja,es-mx,id,pt-br,de,fr` |\
|
|
296
|
+
| |* `zh,en,ja,es-mx,id,pt-br,de,fr` 启用多语种前端 |\
|
|
297
|
+
| |* `zh-cn` 中文为主,支持中英混 |\
|
|
298
|
+
| |* `en` 仅英文 |\
|
|
299
|
+
| |* `ja` 仅日文 |\
|
|
300
|
+
| |* `es-mx` 仅墨西 |\
|
|
301
|
+
| |* `id` 仅印尼 |\
|
|
302
|
+
| |* `pt-br` 仅巴葡 |\
|
|
303
|
+
| |* `de` 仅德语 |\
|
|
304
|
+
| |* `fr` 仅法语 |\
|
|
305
|
+
| | |\
|
|
306
|
+
| |当音色是使用model_type=3训练的,即采用dit还原版效果时,必须指定明确语种,目前支持: |\
|
|
307
|
+
| | |\
|
|
308
|
+
| |* 不给定参数,正常中英混 |\
|
|
309
|
+
| |* `zh-cn` 中文为主,支持中英混 |\
|
|
310
|
+
| |* `en` 仅英文 |\
|
|
311
|
+
| | |\
|
|
312
|
+
| |**语音合成 2.0 音色** |\
|
|
313
|
+
| | |\
|
|
314
|
+
| |* 根据音色列表中音色的支持范围指定对应语种 |\
|
|
315
|
+
| |* 不给定参数,正常中英混 |\
|
|
316
|
+
| | |\
|
|
317
|
+
| |**声音复刻 ICL2.0场景:** |\
|
|
318
|
+
| |当音色是使用model_type=4训练的 |\
|
|
319
|
+
| | |\
|
|
320
|
+
| |* 不给定参数,正常中英混 |\
|
|
321
|
+
| |* `zh-cn` 中文为主,支持中英混 |\
|
|
322
|
+
| |* `en` 仅英文 |\
|
|
323
|
+
| | |\
|
|
324
|
+
| |GoLang示例:`additions = fmt.Sprintf("{"explicit_language": "zh"}")` | |string | |
|
|
325
|
+
| | | | | | \
|
|
326
|
+
|req_params.additions.context_language(参考语种) |给模型提供参考的语种 |\
|
|
327
|
+
| | |\
|
|
328
|
+
| |* 不给定 西欧语种采用英语 |\
|
|
329
|
+
| |* id 西欧语种采用印尼 |\
|
|
330
|
+
| |* es 西欧语种采用墨西 |\
|
|
331
|
+
| |* pt 西欧语种采用巴葡 | |string | |
|
|
332
|
+
| | | | | | \
|
|
333
|
+
|req_params.additions.explicit_dialect |\
|
|
334
|
+
|(明确方言) |\
|
|
335
|
+
| |明确方言,目前仅`zh_female_vv_uranus_bigtts`音色支持以下三种方言: |\
|
|
336
|
+
| | |\
|
|
337
|
+
| |* dongbei(东北话) |\
|
|
338
|
+
| |* shaanxi(陕西话) |\
|
|
339
|
+
| |* sichuan(四川话) |\
|
|
340
|
+
| | |\
|
|
341
|
+
| |参数情况举例说明: |\
|
|
342
|
+
| | |\
|
|
343
|
+
| |1. speaker_id = `zh_female_xiaohe_uranus_bigtts`,explicit_language不传,explicit_dialect=dongbei,则报参数错误,即语种和方言不对应 |\
|
|
344
|
+
| |2. speaker_id =`zh_female_vv_uranus_bigtts`,explicit_language不传,explicit_dialect=dongbei,则正常完成东北方言的合成 |\
|
|
345
|
+
| |3. speaker_id = `zh_female_vv_uranus_bigtts`,explicit_language=ja,explicit_dialect=dongbei,则报参数错误,即语种和方言不对应 |\
|
|
346
|
+
| |4. speaker_id = `zh_female_vv_uranus_bigtts`,explicit_language=ja,explicit_dialect不传,则按照语种正常合成 | |string | |
|
|
347
|
+
| | | | | | \
|
|
348
|
+
|req_params.additions.unsupported_char_ratio_thresh |默认: 0.3,最大值: 1.0 |\
|
|
349
|
+
| |检测出不支持合成的文本超过设置的比例,则会返回错误。 | |float |0.3 |
|
|
350
|
+
| | | | | | \
|
|
351
|
+
|req_params.additions.aigc_watermark |默认:false |\
|
|
352
|
+
| |是否在合成结尾增加音频节奏标识 | |bool |false |
|
|
353
|
+
| | | | | | \
|
|
354
|
+
|req_params.additions.aigc_metadata (meta 水印) |在合成音频 header加入元数据隐式表示,支持 mp3/wav/ogg_opus | |object | |
|
|
355
|
+
| | | | | | \
|
|
356
|
+
|req_params.additions.aigc_metadata.enable |是否启用隐式水印 | |bool |false |
|
|
357
|
+
| | | | | | \
|
|
358
|
+
|req_params.additions.aigc_metadata.content_producer |合成服务提供者的名称或编码 | |string |"" |
|
|
359
|
+
| | | | | | \
|
|
360
|
+
|req_params.additions.aigc_metadata.produce_id |内容制作编号 | |string |"" |
|
|
361
|
+
| | | | | | \
|
|
362
|
+
|req_params.additions.aigc_metadata.content_propagator |内容传播服务提供者的名称或编码 | |string |"" |
|
|
363
|
+
| | | | | | \
|
|
364
|
+
|req_params.additions.aigc_metadata.propagate_id |内容传播编号 | |string |"" |
|
|
365
|
+
| | | | | | \
|
|
366
|
+
|req_params.additions.cache_config(缓存相关参数) |开启缓存,开启后合成**相同文本**时,服务会直接读取缓存返回上一次合成该文本的音频,可明显加快相同文本的合成速率,缓存数据保留时间1小时。 |\
|
|
367
|
+
| |(通过缓存返回的数据不会附带时间戳) |\
|
|
368
|
+
| |Golang示例:`additions = fmt.Sprintf("{"disable_default_bit_rate":true, "cache_config": {"text_type": 1,"use_cache": true}}")` | |object | |
|
|
369
|
+
| | | | | | \
|
|
370
|
+
|req_params.additions.cache_config.text_type(缓存相关参数) |和use_cache参数一起使用,需要开启缓存时传1 | |int |1 |
|
|
371
|
+
| | | | | | \
|
|
372
|
+
|req_params.additions.cache_config.use_cache(缓存相关参数) |和text_type参数一起使用,需要开启缓存时传true | |bool |true |
|
|
373
|
+
| | | | | | \
|
|
374
|
+
|req_params.additions.post_process |后处理配置 |\
|
|
375
|
+
| |Golang示例:`additions = fmt.Sprintf("{"post_process":{"pitch":12}}")` | |object | |
|
|
376
|
+
| | | | | | \
|
|
377
|
+
|req_params.additions.post_process.pitch |音调取值范围是[-12,12] | |int |0 |
|
|
378
|
+
| | | | | | \
|
|
379
|
+
|req_params.additions.context_texts |\
|
|
380
|
+
|([仅TTS2.0支持](https://www.volcengine.com/docs/6561/1257544)) |语音合成的辅助信息,用于模型对话式合成,能更好的体现语音情感; |\
|
|
381
|
+
| |可以探索,比如常见示例有以下几种: |\
|
|
382
|
+
| | |\
|
|
383
|
+
| |1. 语速调整 |\
|
|
384
|
+
| | 1. 比如:context_texts: ["你可以说慢一点吗?"] |\
|
|
385
|
+
| |2. 情绪/语气调整 |\
|
|
386
|
+
| | 1. 比如:context_texts=["你可以用特别特别痛心的语气说话吗?"] |\
|
|
387
|
+
| | 2. 比如:context_texts=["嗯,你的语气再欢乐一点"] |\
|
|
388
|
+
| |3. 音量调整 |\
|
|
389
|
+
| | 1. 比如:context_texts=["你嗓门再小点。"] |\
|
|
390
|
+
| |4. 音感调整 |\
|
|
391
|
+
| | 1. 比如:context_texts=["你能用骄傲的语气来说话吗?"] |\
|
|
392
|
+
| | |\
|
|
393
|
+
| |注意: |\
|
|
394
|
+
| | |\
|
|
395
|
+
| |1. 该字段仅适用于["豆包语音合成模型2.0"的音色](https://www.volcengine.com/docs/6561/1257544) |\
|
|
396
|
+
| |2. 当前字符串列表只第一个值有效 |\
|
|
397
|
+
| |3. 该字段文本不参与计费 | |string list |null |
|
|
398
|
+
| | | | | | \
|
|
399
|
+
|req_params.additions.use_tag_parser |是否开启cot解析能力。cot能力可以辅助当前语音合成,对语速、情感等进行调整。 |\
|
|
400
|
+
| |注意: |\
|
|
401
|
+
| | |\
|
|
402
|
+
| |1. 音色支持范围:仅限声音复刻2.0复刻的音色 |\
|
|
403
|
+
| |2. 文本长度:单句的text字符长度最好小于64(cot标签也计算在内) |\
|
|
404
|
+
| |3. cot能力生效的范围是单句 |\
|
|
405
|
+
| | |\
|
|
406
|
+
| |示例: |\
|
|
407
|
+
| |支持单组和多组cot标签:`<cot text=急促难耐>工作占据了生活的绝大部分</cot>,只有去做自己认为伟大的工作,才能获得满足感。<cot text=语速缓慢>不管生活再苦再累,都绝不放弃寻找</cot>。` | |bool |false |
|
|
408
|
+
| | | | | | \
|
|
409
|
+
|[]req_params.mix_speaker |混音参数结构 |\
|
|
410
|
+
| |注意: |\
|
|
411
|
+
| | |\
|
|
412
|
+
| |1. 该字段仅适用于["豆包语音合成模型1.0"的音色](https://www.volcengine.com/docs/6561/1257544) | |object | |
|
|
413
|
+
| | | | | | \
|
|
414
|
+
|req_params.mix_speaker.speakers |混音音色名以及影响因子列表 |\
|
|
415
|
+
| |注意: |\
|
|
416
|
+
| | |\
|
|
417
|
+
| |1. 最多支持3个音色混音 |\
|
|
418
|
+
| |2. 音色风格差异较大的两个音色(如男女混),以0.5-0.5同等比例混合时,可能出现偶发跳变,建议尽量避免 |\
|
|
419
|
+
| |3. 使用Mix能力时,req_params.speaker = custom_mix_bigtts | |list |null |
|
|
420
|
+
| | | | | | \
|
|
421
|
+
|req_params.mix_speaker.speakers[i].source_speaker |混音源音色名 |\
|
|
422
|
+
| |注意: |\
|
|
423
|
+
| | |\
|
|
424
|
+
| |1. 支持["豆包语音合成模型1.0"的音色](https://www.volcengine.com/docs/6561/1257544)、["语音合成(小模型)"的音色](https://www.volcengine.com/docs/6561/97465?lang=zh)、声音复刻大模型的音色 |\
|
|
425
|
+
| |2. 使用声音复刻大模型音色时,使用`S_`开头的`speakerid`,或者使用查询接口获取的`icl_`的`speakerid`,不支持`DiT_`或者 `saturn_`开头的`speakerid` | |string |"" |
|
|
426
|
+
| | | | | | \
|
|
427
|
+
|req_params.mix_speaker.speakers[i].mix_factor |混音源音色名影响因子 |\
|
|
428
|
+
| |注意: |\
|
|
429
|
+
| | |\
|
|
430
|
+
| |1. 混音影响因子和必须=1 | |float |0 |
|
|
431
|
+
|
|
432
|
+
单音色请求参数示例:
|
|
433
|
+
```JSON
|
|
434
|
+
{
|
|
435
|
+
"user": {
|
|
436
|
+
"uid": "12345"
|
|
437
|
+
},
|
|
438
|
+
"req_params": {
|
|
439
|
+
"text": "明朝开国皇帝朱元璋也称这本书为,万物之根",
|
|
440
|
+
"speaker": "zh_female_shuangkuaisisi_moon_bigtts",
|
|
441
|
+
"audio_params": {
|
|
442
|
+
"format": "mp3",
|
|
443
|
+
"sample_rate": 24000
|
|
444
|
+
},
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
mix请求参数示例:
|
|
451
|
+
```JSON
|
|
452
|
+
{
|
|
453
|
+
"user": {
|
|
454
|
+
"uid": "12345"
|
|
455
|
+
},
|
|
456
|
+
"req_params": {
|
|
457
|
+
"text": "明朝开国皇帝朱元璋也称这本书为万物之根",
|
|
458
|
+
"speaker": "custom_mix_bigtts",
|
|
459
|
+
"audio_params": {
|
|
460
|
+
"format": "mp3",
|
|
461
|
+
"sample_rate": 24000
|
|
462
|
+
},
|
|
463
|
+
"mix_speaker": {
|
|
464
|
+
"speakers": [{
|
|
465
|
+
"source_speaker": "zh_male_bvlazysheep",
|
|
466
|
+
"mix_factor": 0.3
|
|
467
|
+
}, {
|
|
468
|
+
"source_speaker": "BV120_streaming",
|
|
469
|
+
"mix_factor": 0.3
|
|
470
|
+
}, {
|
|
471
|
+
"source_speaker": "zh_male_ahu_conversation_wvae_bigtts",
|
|
472
|
+
"mix_factor": 0.4
|
|
473
|
+
}]
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
<span id="5557b1c1"></span>
|
|
480
|
+
## 2.3 响应Response
|
|
481
|
+
|
|
482
|
+
* 音频响应数据,其中data对应合成音频base64音频数据:
|
|
483
|
+
|
|
484
|
+
```JSON
|
|
485
|
+
{
|
|
486
|
+
"code": 0,
|
|
487
|
+
"message": "",
|
|
488
|
+
"data" : {{STRING}}
|
|
489
|
+
}
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
* 文本响应数据,其中sentence对应合成文本数据(包含时间戳):
|
|
494
|
+
|
|
495
|
+
```JSON
|
|
496
|
+
{
|
|
497
|
+
"code": 0,
|
|
498
|
+
"message": "",
|
|
499
|
+
"data" : null,
|
|
500
|
+
"sentence": <object>
|
|
501
|
+
}
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
示例json:
|
|
505
|
+
```JSON
|
|
506
|
+
{
|
|
507
|
+
"code": 0,
|
|
508
|
+
"message": "",
|
|
509
|
+
"data": null,
|
|
510
|
+
"sentence": {
|
|
511
|
+
"text": "其他人。",
|
|
512
|
+
"words": [
|
|
513
|
+
{
|
|
514
|
+
"confidence": 0.8531248,
|
|
515
|
+
"endTime": 0.315,
|
|
516
|
+
"startTime": 0.205,
|
|
517
|
+
"word": "其"
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
"confidence": 0.9710379,
|
|
521
|
+
"endTime": 0.515,
|
|
522
|
+
"startTime": 0.315,
|
|
523
|
+
"word": "他"
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
"confidence": 0.9189944,
|
|
527
|
+
"endTime": 0.815,
|
|
528
|
+
"startTime": 0.515,
|
|
529
|
+
"word": "人。"
|
|
530
|
+
}
|
|
531
|
+
]
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
|
|
537
|
+
* 合成音频结束对应的成功响应:
|
|
538
|
+
* 其中usage字段默认不存在,仅在header中插入需要返回用量的标记后会新增。
|
|
539
|
+
|
|
540
|
+
```JSON
|
|
541
|
+
{
|
|
542
|
+
"code": 20000000,
|
|
543
|
+
"message": "ok",
|
|
544
|
+
"data": null,
|
|
545
|
+
"usage": {"text_words":10}
|
|
546
|
+
}
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
<span id="96ebcb5c"></span>
|
|
550
|
+
## 2.4 时间戳相关说明
|
|
551
|
+
|
|
552
|
+
| | | | \
|
|
553
|
+
| |**TTS1.0** |\
|
|
554
|
+
| |**ICL1.0** |**TTS2.0** |\
|
|
555
|
+
| | |**ICL2.0** |
|
|
556
|
+
|---|---|---|
|
|
557
|
+
| | | | \
|
|
558
|
+
|事件交互区别 |合成有多个子句会多次返回`TTSSentenceStart`和`TTSSentenceEnd`。开启字幕后字幕跟随`TTSSentenceEnd`返回。 |合成有多个子句,仅返回一次`TTSSentenceStart`和`TTSSentenceEnd`。 |\
|
|
559
|
+
| | |开启字幕后会多次返回`TTSSubtitle`。 |
|
|
560
|
+
| | | | \
|
|
561
|
+
|返回时机 |一个子句的时间戳返回之后才会开始返回下一句音频。 |\
|
|
562
|
+
| | |在一句音频合成之后,不会立即返回该句的字幕。 |\
|
|
563
|
+
| | |合成进度不会被字幕识别阻塞,当一句的字幕识别完成后立即返回。 |\
|
|
564
|
+
| | |可能一个子句的字幕返回的时候,已经返回下一句的音频帧给调用方了。 |
|
|
565
|
+
| | | | \
|
|
566
|
+
|句子返回格式 |\
|
|
567
|
+
| |字幕信息是基于tn打轴 |\
|
|
568
|
+
| |:::tip |\
|
|
569
|
+
| |1. text字段对应于:原文 |\
|
|
570
|
+
| |2. words内文本字段对应于:tn |\
|
|
571
|
+
| |::: |\
|
|
572
|
+
| |第一句: |\
|
|
573
|
+
| |```JSON |\
|
|
574
|
+
| |{ |\
|
|
575
|
+
| | "phonemes": [ |\
|
|
576
|
+
| | ], |\
|
|
577
|
+
| | "text": "2019年1月8日,软件2.0版本于格萨拉彝族乡应时而生。发布会当日,一场瑞雪将天地映衬得纯净无瑕。", |\
|
|
578
|
+
| | "words": [ |\
|
|
579
|
+
| | { |\
|
|
580
|
+
| | "confidence": 0.8766515, |\
|
|
581
|
+
| | "endTime": 0.295, |\
|
|
582
|
+
| | "startTime": 0.155, |\
|
|
583
|
+
| | "word": "二" |\
|
|
584
|
+
| | }, |\
|
|
585
|
+
| | { |\
|
|
586
|
+
| | "confidence": 0.95224416, |\
|
|
587
|
+
| | "endTime": 0.425, |\
|
|
588
|
+
| | "startTime": 0.295, |\
|
|
589
|
+
| | "word": "零" |\
|
|
590
|
+
| | }, |\
|
|
591
|
+
| | { |\
|
|
592
|
+
| | "confidence": 0.9108828, |\
|
|
593
|
+
| | "endTime": 0.575, |\
|
|
594
|
+
| | "startTime": 0.425, |\
|
|
595
|
+
| | "word": "一" |\
|
|
596
|
+
| | }, |\
|
|
597
|
+
| | { |\
|
|
598
|
+
| | "confidence": 0.9609025, |\
|
|
599
|
+
| | "endTime": 0.755, |\
|
|
600
|
+
| | "startTime": 0.575, |\
|
|
601
|
+
| | "word": "九" |\
|
|
602
|
+
| | }, |\
|
|
603
|
+
| | { |\
|
|
604
|
+
| | "confidence": 0.96244556, |\
|
|
605
|
+
| | "endTime": 1.005, |\
|
|
606
|
+
| | "startTime": 0.755, |\
|
|
607
|
+
| | "word": "年" |\
|
|
608
|
+
| | }, |\
|
|
609
|
+
| | { |\
|
|
610
|
+
| | "confidence": 0.85796577, |\
|
|
611
|
+
| | "endTime": 1.155, |\
|
|
612
|
+
| | "startTime": 1.005, |\
|
|
613
|
+
| | "word": "一" |\
|
|
614
|
+
| | }, |\
|
|
615
|
+
| | { |\
|
|
616
|
+
| | "confidence": 0.8460129, |\
|
|
617
|
+
| | "endTime": 1.275, |\
|
|
618
|
+
| | "startTime": 1.155, |\
|
|
619
|
+
| | "word": "月" |\
|
|
620
|
+
| | }, |\
|
|
621
|
+
| | { |\
|
|
622
|
+
| | "confidence": 0.90833753, |\
|
|
623
|
+
| | "endTime": 1.505, |\
|
|
624
|
+
| | "startTime": 1.275, |\
|
|
625
|
+
| | "word": "八" |\
|
|
626
|
+
| | }, |\
|
|
627
|
+
| | { |\
|
|
628
|
+
| | "confidence": 0.9403977, |\
|
|
629
|
+
| | "endTime": 1.935, |\
|
|
630
|
+
| | "startTime": 1.505, |\
|
|
631
|
+
| | "word": "日," |\
|
|
632
|
+
| | }, |\
|
|
633
|
+
| | |\
|
|
634
|
+
| | ... |\
|
|
635
|
+
| | |\
|
|
636
|
+
| | { |\
|
|
637
|
+
| | "confidence": 0.9415791, |\
|
|
638
|
+
| | "endTime": 10.505, |\
|
|
639
|
+
| | "startTime": 10.355, |\
|
|
640
|
+
| | "word": "无" |\
|
|
641
|
+
| | }, |\
|
|
642
|
+
| | { |\
|
|
643
|
+
| | "confidence": 0.903162, |\
|
|
644
|
+
| | "endTime": 10.895, // 第一句结束时间 |\
|
|
645
|
+
| | "startTime": 10.505, |\
|
|
646
|
+
| | "word": "瑕。" |\
|
|
647
|
+
| | } |\
|
|
648
|
+
| | ] |\
|
|
649
|
+
| |} |\
|
|
650
|
+
| |``` |\
|
|
651
|
+
| | |\
|
|
652
|
+
| |第二句: |\
|
|
653
|
+
| |```JSON |\
|
|
654
|
+
| |{ |\
|
|
655
|
+
| | "phonemes": [ |\
|
|
656
|
+
| | |\
|
|
657
|
+
| | ], |\
|
|
658
|
+
| | "text": "这仿佛一则自然寓言:我们致力于在不断的版本迭代中,为您带来如雪后初霁般清晰、焕然一新的体验。", |\
|
|
659
|
+
| | "words": [ |\
|
|
660
|
+
| | { |\
|
|
661
|
+
| | "confidence": 0.8970245, |\
|
|
662
|
+
| | "endTime": 11.6953745, |\
|
|
663
|
+
| | "startTime": 11.535375, // 第二句开始时间,是相对整个session的位置 |\
|
|
664
|
+
| | "word": "这" |\
|
|
665
|
+
| | }, |\
|
|
666
|
+
| | { |\
|
|
667
|
+
| | "confidence": 0.86508185, |\
|
|
668
|
+
| | "endTime": 11.875375, |\
|
|
669
|
+
| | "startTime": 11.6953745, |\
|
|
670
|
+
| | "word": "仿" |\
|
|
671
|
+
| | }, |\
|
|
672
|
+
| | { |\
|
|
673
|
+
| | "confidence": 0.73354065, |\
|
|
674
|
+
| | "endTime": 12.095375, |\
|
|
675
|
+
| | "startTime": 11.875375, |\
|
|
676
|
+
| | "word": "佛" |\
|
|
677
|
+
| | }, |\
|
|
678
|
+
| | { |\
|
|
679
|
+
| | "confidence": 0.8525295, |\
|
|
680
|
+
| | "endTime": 12.275374, |\
|
|
681
|
+
| | "startTime": 12.095375, |\
|
|
682
|
+
| | "word": "一" |\
|
|
683
|
+
| | }... |\
|
|
684
|
+
| | ] |\
|
|
685
|
+
| |} |\
|
|
686
|
+
| |``` |\
|
|
687
|
+
| | |字幕信息是基于原文打轴 |\
|
|
688
|
+
| | |:::tip |\
|
|
689
|
+
| | |1. text字段对应于:原文 |\
|
|
690
|
+
| | |2. words内文本字段对应于:原文 |\
|
|
691
|
+
| | |::: |\
|
|
692
|
+
| | |第一句: |\
|
|
693
|
+
| | |```JSON |\
|
|
694
|
+
| | |{ |\
|
|
695
|
+
| | | "phonemes": [ |\
|
|
696
|
+
| | | ], |\
|
|
697
|
+
| | | "text": "2019年1月8日,软件2.0版本于格萨拉彝族乡应时而生。", |\
|
|
698
|
+
| | | "words": [ |\
|
|
699
|
+
| | | { |\
|
|
700
|
+
| | | "confidence": 0.11120544, |\
|
|
701
|
+
| | | "endTime": 0.615, |\
|
|
702
|
+
| | | "startTime": 0.585, |\
|
|
703
|
+
| | | "word": "2019" |\
|
|
704
|
+
| | | }, |\
|
|
705
|
+
| | | { |\
|
|
706
|
+
| | | "confidence": 0.8413397, |\
|
|
707
|
+
| | | "endTime": 0.845, |\
|
|
708
|
+
| | | "startTime": 0.615, |\
|
|
709
|
+
| | | "word": "年" |\
|
|
710
|
+
| | | }, |\
|
|
711
|
+
| | | { |\
|
|
712
|
+
| | | "confidence": 0.2413961, |\
|
|
713
|
+
| | | "endTime": 0.875, |\
|
|
714
|
+
| | | "startTime": 0.845, |\
|
|
715
|
+
| | | "word": "1" |\
|
|
716
|
+
| | | }, |\
|
|
717
|
+
| | | { |\
|
|
718
|
+
| | | "confidence": 0.8487973, |\
|
|
719
|
+
| | | "endTime": 1.055, |\
|
|
720
|
+
| | | "startTime": 0.875, |\
|
|
721
|
+
| | | "word": "月" |\
|
|
722
|
+
| | | }, |\
|
|
723
|
+
| | | { |\
|
|
724
|
+
| | | "confidence": 0.509697, |\
|
|
725
|
+
| | | "endTime": 1.225, |\
|
|
726
|
+
| | | "startTime": 1.165, |\
|
|
727
|
+
| | | "word": "8" |\
|
|
728
|
+
| | | }, |\
|
|
729
|
+
| | | { |\
|
|
730
|
+
| | | "confidence": 0.9516253, |\
|
|
731
|
+
| | | "endTime": 1.485, |\
|
|
732
|
+
| | | "startTime": 1.225, |\
|
|
733
|
+
| | | "word": "日," |\
|
|
734
|
+
| | | }, |\
|
|
735
|
+
| | | |\
|
|
736
|
+
| | | ... |\
|
|
737
|
+
| | | |\
|
|
738
|
+
| | | { |\
|
|
739
|
+
| | | "confidence": 0.6933777, |\
|
|
740
|
+
| | | "endTime": 5.435, |\
|
|
741
|
+
| | | "startTime": 5.325, |\
|
|
742
|
+
| | | "word": "而" |\
|
|
743
|
+
| | | }, |\
|
|
744
|
+
| | | { |\
|
|
745
|
+
| | | "confidence": 0.921702, |\
|
|
746
|
+
| | | "endTime": 5.695, // 第一句结束时间 |\
|
|
747
|
+
| | | "startTime": 5.435, |\
|
|
748
|
+
| | | "word": "生。" |\
|
|
749
|
+
| | | } |\
|
|
750
|
+
| | | ] |\
|
|
751
|
+
| | |} |\
|
|
752
|
+
| | |``` |\
|
|
753
|
+
| | | |\
|
|
754
|
+
| | | |\
|
|
755
|
+
| | |第二句: |\
|
|
756
|
+
| | |```JSON |\
|
|
757
|
+
| | |{ |\
|
|
758
|
+
| | | "phonemes": [ |\
|
|
759
|
+
| | | |\
|
|
760
|
+
| | | ], |\
|
|
761
|
+
| | | "text": "发布会当日,一场瑞雪将天地映衬得纯净无瑕。", |\
|
|
762
|
+
| | | "words": [ |\
|
|
763
|
+
| | | { |\
|
|
764
|
+
| | | "confidence": 0.7016578, |\
|
|
765
|
+
| | | "endTime": 6.3550415, |\
|
|
766
|
+
| | | "startTime": 6.2150416, // 第二句开始时间,是相对整个session的位置 |\
|
|
767
|
+
| | | "word": "发" |\
|
|
768
|
+
| | | }, |\
|
|
769
|
+
| | | { |\
|
|
770
|
+
| | | "confidence": 0.6800497, |\
|
|
771
|
+
| | | "endTime": 6.4450417, |\
|
|
772
|
+
| | | "startTime": 6.3550415, |\
|
|
773
|
+
| | | "word": "布" |\
|
|
774
|
+
| | | }, |\
|
|
775
|
+
| | | |\
|
|
776
|
+
| | | ... |\
|
|
777
|
+
| | | |\
|
|
778
|
+
| | | { |\
|
|
779
|
+
| | | "confidence": 0.8818264, |\
|
|
780
|
+
| | | "endTime": 10.145041, |\
|
|
781
|
+
| | | "startTime": 9.945042, |\
|
|
782
|
+
| | | "word": "净" |\
|
|
783
|
+
| | | }, |\
|
|
784
|
+
| | | { |\
|
|
785
|
+
| | | "confidence": 0.87248623, |\
|
|
786
|
+
| | | "endTime": 10.285042, |\
|
|
787
|
+
| | | "startTime": 10.145041, |\
|
|
788
|
+
| | | "word": "无" |\
|
|
789
|
+
| | | }, |\
|
|
790
|
+
| | | { |\
|
|
791
|
+
| | | "confidence": 0.8069703, |\
|
|
792
|
+
| | | "endTime": 10.505041, |\
|
|
793
|
+
| | | "startTime": 10.285042, |\
|
|
794
|
+
| | | "word": "瑕。" |\
|
|
795
|
+
| | | } |\
|
|
796
|
+
| | | ] |\
|
|
797
|
+
| | |} |\
|
|
798
|
+
| | |``` |\
|
|
799
|
+
| | | |\
|
|
800
|
+
| | | |
|
|
801
|
+
| | | | \
|
|
802
|
+
|语种 |中、英,不支持小语种、方言 |中、英,不支持小语种、方言 |
|
|
803
|
+
| | | | \
|
|
804
|
+
|latex |enable_latex_tn=true,有字幕返回 |enable_latex_tn=true,无字幕返回,接口不报错 |
|
|
805
|
+
| | | | \
|
|
806
|
+
|ssml |req_params.ssml不为空,有字幕返回 |req_params.ssml不为空,无字幕返回,接口不报错 |
|
|
807
|
+
|
|
808
|
+
<span id="35d1be27"></span>
|
|
809
|
+
## 2.5 实例samples
|
|
810
|
+
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/b86fde682e2649e1a5498bfd71f21be3~tplv-goo7wpa0wc-image.image" name="tts_http_demo.py" ></Attachment>
|
|
811
|
+
<span id="d8a0ebce"></span>
|
|
812
|
+
# 3 SSE格式接口说明
|
|
813
|
+
<span id="8c718473"></span>
|
|
814
|
+
## 3.1 请求Request
|
|
815
|
+
<span id="e33029c9"></span>
|
|
816
|
+
### 请求路径
|
|
817
|
+
|
|
818
|
+
* 服务对应的请求路径:`https://openspeech.bytedance.com/api/v3/tts/unidirectional/sse`
|
|
819
|
+
|
|
820
|
+
<span id="9e794140"></span>
|
|
821
|
+
### Request Headers
|
|
822
|
+
|
|
823
|
+
* 同2.1节中的HTTP Chunked格式接口的Request Headers中内容一样
|
|
824
|
+
|
|
825
|
+
<span id="d9de0c79"></span>
|
|
826
|
+
## 3.2 请求Body
|
|
827
|
+
|
|
828
|
+
* 同2.2节中的HTTP Chunked格式接口的Request Body的内容一样, 示例也同2.2节中的HTTP Chunked格式接口所示。
|
|
829
|
+
|
|
830
|
+
<span id="488db789"></span>
|
|
831
|
+
## 3.3 响应Response
|
|
832
|
+
<span id="88eefd58"></span>
|
|
833
|
+
### Response Headers
|
|
834
|
+
|
|
835
|
+
| | | | \
|
|
836
|
+
|Key |说明 |Value示例 |
|
|
837
|
+
|---|---|---|
|
|
838
|
+
| | | | \
|
|
839
|
+
|Content-Type |返回的数据类型,一般为event-stream |text/event-stream |
|
|
840
|
+
| | | | \
|
|
841
|
+
|X-Tt-Logid |服务端返回的 logid,建议用户获取和打印方便定位问题 |2025041513355271DF5CF1A0AE0508E78C |
|
|
842
|
+
|
|
843
|
+
<span id="451fd02c"></span>
|
|
844
|
+
## 3.4 Response Body
|
|
845
|
+
|
|
846
|
+
* 单个返回内容同2.2节中HTTP Chunked格式接口的Response内容, 包含由code、message、data等字段组成的对象。
|
|
847
|
+
* 整体返回示例如下
|
|
848
|
+
|
|
849
|
+
```JSON
|
|
850
|
+
event: 352
|
|
851
|
+
data: {"code":0,"message":"","data":"二进制音频流xxxx"}
|
|
852
|
+
|
|
853
|
+
event: 351
|
|
854
|
+
data: {"code":0,"message":"","data":null,"sentence":{"phonemes":[],"text":"音频文件能够正常播放。","words":[]}}
|
|
855
|
+
|
|
856
|
+
event: 152
|
|
857
|
+
data: {"code":20000000,"message":"OK","data":null,"usage":{"text_words":11}}
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
|
|
861
|
+
* event 表示云端响应的事件ID。以下为常见的事件,仅供参考使用。
|
|
862
|
+
* 351 - TTSSentenceEnd (TTS 语句处理结束)
|
|
863
|
+
* 352 - TTSResponse (TTS的合成内容,一般多包含二进制字符串流)
|
|
864
|
+
* 151 - SessionCancel (会话被取消)
|
|
865
|
+
* 152 - SessionFinish (会话结束)
|
|
866
|
+
* 153 - SessionFailed (会话失败)
|
|
867
|
+
|
|
868
|
+
<span id="f1598651"></span>
|
|
869
|
+
## 3.5 使用限制
|
|
870
|
+
|
|
871
|
+
* 目前本接口仅支持以SSE的格式返回数据,对其常规能力,如重连、断点续传等能力暂不支持。
|
|
872
|
+
|
|
873
|
+
<span id="a3fef8a2"></span>
|
|
874
|
+
## 3.6 示例Samples
|
|
875
|
+
<Attachment link="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/ab89ee3d0d40492e879a1a760dd8133f~tplv-goo7wpa0wc-image.image" name="tts_http_sse_demo.py" ></Attachment>
|
|
876
|
+
<span id="60a09161"></span>
|
|
877
|
+
# 4 错误码
|
|
878
|
+
|
|
879
|
+
| | | | \
|
|
880
|
+
|Code |Message |说明 |
|
|
881
|
+
|---|---|---|
|
|
882
|
+
| | | | \
|
|
883
|
+
|20000000 |ok |音频合成结束的成功状态码 |
|
|
884
|
+
| | | | \
|
|
885
|
+
|40402003 |TTSExceededTextLimit:exceed max limit |提交文本长度超过限制 |
|
|
886
|
+
| | | | \
|
|
887
|
+
|45000000 |\
|
|
888
|
+
| |speaker permission denied: get resource id: access denied |音色鉴权失败,一般是speaker指定音色未授权或者错误导致 |\
|
|
889
|
+
| | | |
|
|
890
|
+
|^^| | | \
|
|
891
|
+
| |quota exceeded for types: concurrency |并发限流,一般是请求并发数超过限制 |
|
|
892
|
+
| | | | \
|
|
893
|
+
|55000000 |服务端一些error |服务端通用错误 |
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
|