长文本语音异步合成服务在输出音频流的同时,可输出每次传入文本中各单句(在句号、问号、叹号等位置切分)在音频中的时间位置,即句级别时间戳。该时间信息可用于视频配音字幕或有声书播报文字高亮等场景。本文为您介绍时间戳功能。
短文本与长文本语音合成对比
语音合成提供短文本(WebSocket 流式)和长文本(RESTful 异步)两种合成方式,二者在时间戳能力上存在差异,请根据文本长度和字幕粒度需求选择合适的接口:
对比项 | 短文本语音合成 | 长文本语音合成 |
接口类型 | WebSocket(wss)流式接口 | RESTful 接口(异步) |
字符上限 | 单次约 300 字符 | 一次性合成最高 10 万字符 |
时间戳级别 | 字级别(音素边界)时间戳;RESTful 接口不支持时间戳 | 句级别时间戳 |
开启参数 | 设置 | 设置 |
| 在响应 header 中返回 | 在响应 |
本文后续内容仅针对长文本语音合成的句级时间戳功能展开说明。
使用限制
针对长文本语音合成,目前只支持长文本RESTful接口句级时间戳。
参数设置
在客户端将请求参数enable_subtitle设置为true,开启时间戳功能。以RESTful接口为例、其设置方式如下:
// 长文本TTS RESTful接口支持句级时间戳,默认为false,不开启。
tts.put("enable_subtitle", true);服务端响应
服务端返回的带字幕信息的响应sentences字段。
参数 | 类型 | 说明 |
sentences | List | 时间戳信息 |
其中sentences字段格式如下:
参数 | 类型 | 说明 |
begin_time | String | ⽂本对应TTS语⾳开始时间戳,单位ms。 |
end_time | String | ⽂本对应TTS语⾳结束时间戳,单位ms。 |
示例
请求示例:
{
"payload":{
"tts_request":{
"voice":"Aifan",
"sample_rate":16000,
"format":"mp3",
"enable_subtitle":true,
"text":"我家的后面有一个很大的园,相传叫作百草园。现在是早已并屋子一起卖给朱文公的子孙了,连那最末次的相见也已经隔了七八年,其中似乎确凿只有一些野草;但那时却是我的乐园。"
},
"notify_url":"http://123****.com",
"enable_notify":false
},
"context":{
"device_id":"my_device_id"
},
"header":{
"appkey":"1iMxP16qgjP****",
"token":"16aea272b48d4bb188664611837f****"
}
}返回示例:
{
"status":200,
"data":{
"sentences":[
{
"text":"我家的后面有一个很大的园,相传叫作百草园",
"begin_time":"0",
"end_time":"4247"
},
{
"text":"现在是早已并屋子一起卖给朱文公的子孙了,连那最末次的相见也已经隔了七八年,其中似乎确凿只有一些野草;但那时却是我的乐园",
"begin_time":"4247",
"end_time":"16060"
}
],
"task_id":"9628f978abab4628b1bcfd5a9da3749f",
"audio_address":"http://nls-cloud-cn-shanghai.oss-cn-shanghai.aliyuncs.com/jupiter-flow/tmp/9628f978abab4628b1bcfd5a9da3749f.mp3?Expires=1621305670&OSSAccessKeyId=LTAI****************&Signature=OYHTJMQXMpiAx*****",
"notify_custom":""
},
"error_code":20000000,
"error_message":"SUCCESS",
"request_id":"7e70c414c31a41ae86b4a5f4241a6f3c"
}该文章对您有帮助吗?