长文本语音合成支持在合成结果中返回文本片段在音频中的开始和结束时间,即句级时间戳,可用于视频配音字幕或有声书播放时的文字高亮。
适用范围
长文本语音合成的句级时间戳通过 RESTful 异步接口获取。完整调用流程和示例代码,请参见长文本语音合成 RESTful API。
短文本语音合成的时间戳用法,请参见语音合成时间戳功能介绍。
开启时间戳
提交长文本语音合成任务时,将请求体中的 payload.tts_request.enable_subtitle 设置为 true。该参数默认为 false,即不开启时间戳。
在 Java 示例中,tts 表示 tts_request 对象,设置方式如下:
tts.put("enable_subtitle", true);
获取时间戳
提交任务成功后,使用响应中的 data.task_id 轮询合成结果。合成完成后,从 data.audio_address 获取音频下载地址,从 data.sentences 获取时间戳信息。
|
字段 |
类型 |
说明 |
|
|
List |
句级时间戳信息,位于响应的 |
sentences 元素字段
|
字段 |
类型 |
说明 |
|
|
String |
当前片段对应的文本。 |
|
|
String |
当前片段在合成音频中的开始时间,相对音频起点的偏移量,单位为毫秒。 |
|
|
String |
当前片段在合成音频中的结束时间,相对音频起点的偏移量,单位为毫秒。 |
字幕展示或文字高亮应使用返回的 text 及其对应时间。
请求与响应示例
以下请求体使用 siyue 音色合成 WAV 音频,并开启句级时间戳。将 yourAppkey 和 yourToken 分别替换为项目 Appkey 和有效的 NLS Token。
{
"payload": {
"tts_request": {
"voice": "siyue",
"sample_rate": 16000,
"format": "wav",
"enable_subtitle": true,
"text": "今天天气很好。我们一起出去走走。"
},
"enable_notify": false
},
"context": {
"device_id": "my_device_id"
},
"header": {
"appkey": "yourAppkey",
"token": "yourToken"
}
}
合成完成后的查询响应示例如下。任务 ID、请求 ID 和音频下载地址以占位值表示。
{
"status": 200,
"data": {
"sentences": [
{
"text": "今天天气很好。",
"begin_time": "0",
"end_time": "1627"
},
{
"text": "我们一起出去走走。",
"begin_time": "1627",
"end_time": "3194"
}
],
"task_id": "<task_id>",
"audio_address": "<audio_address>",
"notify_custom": null
},
"error_code": 20000000,
"error_message": "SUCCESS",
"request_id": "<request_id>"
}
该文章对您有帮助吗?