# 语音处理
平台在多元素整合的视频合成基础能力之外,还另外提供语音处理的相关能力,支持用户对于视频合成的语音相关内容进行预处理,提供多项能力,TTS、ASR、NLP、多音字、音色迁移等,此外提供USSML(Unified Speech Synthesis Markup Language)能力,归一化各TTS供应商的 SSML(Speech Synthesis Markup Language)语法格式。
# 能力介绍
- TTS语音合成
- 根据用户选择的发音人音色结合传入的文本内容将文本朗读出来,支持调节朗读声音的音调,语速和音量。需要注意所有语言的发音人都可以合成英文文本;所有语言的发音人都可以合成自己语言的文本;粤语、沪语等中文方言发音人可以合成中文文本。
- ASR语音识别
- 根据用户传入的音频内容进行解析,将其转写为相应的文本内容。
- NLP自然语言理解
- 根据用户传入的文字内容进行词义及语义分析,并进行有效的理解和拓展,进一步反馈用户预期的文本内容。
- 多音字处理
- 根据用户传入的文字内容进行多音字检索,反馈给用户可能出现的多音字以及对应的发音备选。
- 音色迁移
- 根据用户传入的音频内容以及指定的音色,将原音频内容迁移至对应的音色合成后返回结果音频。
# API说明
用户调用平台全部API服务,皆需要访问服务接入点:aigc.softsugar.com,并在请求头中加上token信息。
# TTS语言检测
# 接口描述
根据用户传入的文本内容识别所属的语言,并返回对应的language code。
# 请求地址
POST
/api/voice/v1/nlp/language
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
query | String | True | 文本内容 |
# 请求样例
{
"query": "待合成语音的文本内容xxxxxx"
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.result | String | 语言代码,参考标准 ISO 639-1 (opens new window). 目前支持检测:af, am, an, ar, as, az, be, bg, bn, br, bs, ca, cs, cy, da, de, dz, el, en, eo, es, et, eu, fa, fi, fo, fr, ga, gl, gu, he, hi, hr, ht, hu, hy, id, is, it, ja, jv, ka, kk, km, kn, ko, ku, ky, la, lb, lo, lt, lv, mg, mk, ml, mn, mr, ms, mt, nb, ne, nl, nn, no, oc, or, pa, pl, ps, pt, qu, ro, ru, rw, se, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, ug, uk, ur, vi, vo, wa, xh, zh, zu |
# 响应样例
case1:请求成功
{
"code": 0,
"message": "ok",
"data": {
"status": 0,
"result": "zh"
}
}
# TTS语言校验(Qid)
# 接口描述
根据用户传入的文本内容以及语言、QID,判断各元素之间是否匹配,并返回检测结果的language code。
# 请求地址
POST
/api/voice/v3/tts/validate
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
query | String | True | 文本内容 |
qid | String | True | 音色-Qid |
ssml | Boolean | False | 是否使用SSML,默认为否 |
# 请求样例
{
"query": "待合成语音的文本内容xxxxxx",
"qid": "AEBEvMy850Y_Z10Mqp9GUwDGHMSi0tS_TMr8xMyI3Tzk3QyqsK",
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.result | String | 校验结果 |
data.result.valid | Boolean | 是否匹配 |
data.result.language | String | 检测到的语言代码,参考标准 ISO 639-1 (opens new window). 目前支持检测:af, am, an, ar, as, az, be, bg, bn, br, bs, ca, cs, cy, da, de, dz, el, en, eo, es, et, eu, fa, fi, fo, fr, ga, gl, gu, he, hi, hr, ht, hu, hy, id, is, it, ja, jv, ka, kk, km, kn, ko, ku, ky, la, lb, lo, lt, lv, mg, mk, ml, mn, mr, ms, mt, nb, ne, nl, nn, no, oc, or, pa, pl, ps, pt, qu, ro, ru, rw, se, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, ug, uk, ur, vi, vo, wa, xh, zh, zu |
# 响应样例
case1:请求成功
{
"code": 0,
"message": "ok",
"data": {
"status": 0,
"result": {
"valid": true,
"language": "zh"
}
}
}
# TTS语言校验(旧)
注:该接口目前处理维护状态,不在更新新功能。建议使用Qid接口。
# 接口描述
根据用户传入的文本内容以及语言、音色、供应商ID,判断各元素之间是否匹配,并返回检测结果的language code。
# 请求地址
POST
/api/voice/v1/tts/validate
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
query | String | True | 文本内容 |
voice_id | String | True | 音色ID |
language | String | True | 语言,支持 BCP47 (opens new window).格式,如 "en-US"、"zh-CN" |
vendor_id | Integer | True | 供应商ID |
ssml | Boolean | False | 是否使用SSML |
# 请求样例
{
"query": "待合成语音的文本内容xxxxxx",
"voice_id": "xiaoling",
"language": "zh-CN",
"vendor_id": 3
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.result | String | 校验结果 |
data.result.valid | Boolean | 是否匹配 |
data.result.language | String | 检测到的语言代码,参考标准 ISO 639-1 (opens new window). 目前支持检测:af, am, an, ar, as, az, be, bg, bn, br, bs, ca, cs, cy, da, de, dz, el, en, eo, es, et, eu, fa, fi, fo, fr, ga, gl, gu, he, hi, hr, ht, hu, hy, id, is, it, ja, jv, ka, kk, km, kn, ko, ku, ky, la, lb, lo, lt, lv, mg, mk, ml, mn, mr, ms, mt, nb, ne, nl, nn, no, oc, or, pa, pl, ps, pt, qu, ro, ru, rw, se, si, sk, sl, sq, sr, sv, sw, ta, te, th, tl, tr, ug, uk, ur, vi, vo, wa, xh, zh, zu |
# 响应样例
case1:请求成功
{
"code": 0,
"message": "ok",
"data": {
"status": 0,
"result": {
"valid": true,
"language": "zh"
}
}
}
# Voice ID 迁移至 QID
# 接口描述
主动迁移已有的 Voice ID 表示的旧音色至 Qid 表示的新音色,并返回对应的 Qid 取值,建议对 Qid 进行存储,用于后续推理请求。
# 请求地址
POST
/api/voice/v3/tts/migrate
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
voice_id | String | True | 需要进行转换的音色id |
# 请求样例
{
"voice_id": "xiaoning",
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.result | String | Qid,表示预配置 Qid。此字段的长度较长,建议以 VARCHAR(512) 类型进行存储 |
# 响应样例
{
"code": 0,
"message": "ok",
"data": {
"status": 0,
"result": "JQb7Qv:AEA_Z10Mqp9GYwDGdLzMvPzEzIqwo"
}
}
# 发起TTS请求(Qid)
# 接口描述
根据用户选择的发音人音色结合传入的文本内容将文本朗读出来,支持调节朗读声音的音调,语速和音量。需要注意所有语言的发音人都可以合成英文文本;所有语言的发音人都可以合成自己语言的文本;粤语、沪语等中文方言发音人可以合成中文文本。
# 请求地址
POST
/api/voice/v3/tts/request
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
qid | String | True | 发音人Qid |
query | String | True | 待合成语音的文本内容 |
ssml | Boolean | False | 是否使用SSML |
phoneme | Boolean | False | 是否需要返回音素文件URL |
timeout | Integer | False | 等待返回的超时时间,单位为ms。如在超时时间内返回,直接返回TTS结果,否则返回 request_id |
pitch_offset | Float | False | 语调,数值越大越尖锐,越低越低沉,支持范围 [-60, 60];默认0 |
speed_ratio | Float | False | 语速,数值越大语速越慢,支持范围 [0.5, 2];默认1.0 |
volume | Integer | False | 音量,数值越大声音越大,支持范围 [1, 400];默认100 |
subtitle_max_length | Integer | False | 每行字幕最大长度,默认为0,即不限制长度 |
subtitle_cut_by_punc | Boolean | False | 是否根据标点符号对字幕进行切分换行,默认为false,即不切分 |
word_time | Boolean | False | 是否返回字级别时间戳,默认为false,即不返回 |
# 请求样例
{
"qid": "AEBEvMy850Y_Z10Mqp9GUwDGHMSi0tS_TMr8xMyI3Tzk3QyqsK",
"query": "待合成语音的文本内容xxxxxx",
"phoneme": true,
"timeout": 3000,
"word_time": true,
"pitch_offset": 0.0,
"speed_ratio": 1.0,
"volume": 100
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object | TTS合成结果,如在超时时间内返回,返回此字段否则此字段为空{} |
data.result.audio_url | String | TTS合成音频MP3文件URL |
data.result.srt_url | String | TTS音频字幕SRT文件URL |
data.result.phone_url | String | TTS音频音素文件URL |
data.result.duration_ms | Integer | TTS合成音频MP3文件音频时长,单位为 ms |
data.result.word_times | List | TTS音频字文件字级别时间戳 ,单位为 ms |
data.result.word_times.begin_ms | Integer | TTS音频文件字开始时间戳,单位为 ms |
data.result.word_times.end_ms | Integer | TTS音频文件字结束时间戳,单位为 ms |
data.result.word_times.text | String | TTS音频文件字文本内容 |
# 响应样例
case1:请求超时
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {}
}
}
case2:请求未超时,请求成功
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {
"audio_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.mp3",
"srt_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.srt",
"phone_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.phone",
"duration_ms": 1000,
"word_times": [
{
"begin_ms": 2080,
"end_ms": 2560,
"text": "字"
},
{
"begin_ms": 2560,
"end_ms": 3040,
"text": "级"
},
{
"begin_ms": 3040,
"end_ms": 3520,
"text": "别"
},
{
"begin_ms": 3520,
"end_ms": 4000,
"text": "时"
},
{
"begin_ms": 4000,
"end_ms": 4480,
"text": "间"
},
{
"begin_ms": 4480,
"end_ms": 4960,
"text": "戳"
} ]
}
}
}
# 发起TTS请求(旧)
注:该接口目前处理维护状态,不在更新新功能。建议使用Qid接口。
# 接口描述
根据用户选择的发音人音色结合传入的文本内容将文本朗读出来,支持调节朗读声音的音调,语速和音量。需要注意所有语言的发音人都可以合成英文文本;所有语言的发音人都可以合成自己语言的文本;粤语、沪语等中文方言发音人可以合成中文文本。
# 请求地址
POST
/api/voice/v1/request/tts
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
voice_id | String | True | 发音人ID |
language | String | False | 语言 |
query | String | True | 待合成语音的文本内容 |
ssml | Boolean | False | 是否使用SSML |
phoneme | Boolean | False | 是否需要返回音素文件URL |
timeout | Integer | False | 等待返回的超时时间,单位为ms。如在超时时间内返回,直接返回TTS结果,否则返回 request_id |
pitch_offset | Float | False | 语调,数值越大越尖锐,越低越低沉,支持范围 [-60, 60];默认0 |
speed_ratio | Float | False | 语速,数值越大语速越慢,支持范围 [0.5, 2];默认1.0 |
volume | Integer | False | 音量,数值越大声音越大,支持范围 [1, 400];默认100 |
subtitle_max_length | Integer | False | 每行字幕最大长度,默认为0,即不限制长度 |
subtitle_cut_by_punc | Boolean | False | 是否根据标点符号对字幕进行切分换行,默认为false,即不切分 |
word_time | Boolean | False | 是否返回字级别时间戳,默认为false,即不返回 |
# 请求样例
{
"voice_id": "xiaoling",
"query": "待合成语音的文本内容xxxxxx",
"phoneme": true,
"timeout": 3000,
"word_time": true,
"pitch_offset": 0.0,
"speed_ratio": 1.0,
"volume": 100
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object | TTS合成结果,如在超时时间内返回,返回此字段否则此字段为空{} |
data.result.audio_url | String | TTS合成音频MP3文件URL |
data.result.srt_url | String | TTS音频字幕SRT文件URL |
data.result.phone_url | String | TTS音频音素文件URL |
data.result.duration_ms | Integer | TTS合成音频MP3文件音频时长,单位为 ms |
data.result.word_times | List | TTS音频字文件字级别时间戳 ,单位为 ms |
data.result.word_times.begin_ms | Integer | TTS音频文件字开始时间戳,单位为 ms |
data.result.word_times.end_ms | Integer | TTS音频文件字结束时间戳,单位为 ms |
data.result.word_times.text | String | TTS音频文件字文本内容 |
# 响应样例
case1:请求超时
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {}
}
}
case2:请求未超时,请求成功
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {
"audio_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.mp3",
"srt_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.srt",
"phone_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.phone",
"duration_ms": 1000,
"word_times": [
{
"begin_ms": 2080,
"end_ms": 2560,
"text": "字"
},
{
"begin_ms": 2560,
"end_ms": 3040,
"text": "级"
},
{
"begin_ms": 3040,
"end_ms": 3520,
"text": "别"
},
{
"begin_ms": 3520,
"end_ms": 4000,
"text": "时"
},
{
"begin_ms": 4000,
"end_ms": 4480,
"text": "间"
},
{
"begin_ms": 4480,
"end_ms": 4960,
"text": "戳"
} ]
}
}
}
# TTS状态查询(Qid)
# 接口描述
根据输入参数返回指定TTS请求的当前状态。
# 请求地址
POST
/api/voice/v3/tts/result
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
request_id | String | True | 请求ID |
# 请求样例
{
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7"
}
# 响应参数
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object | TTS合成结果,如在超时时间内返回,返回此字段否则此字段为空{} |
data.result.audio_url | String | TTS合成音频MP3文件URL |
data.result.srt_url | String | TTS音频字幕SRT文件URL |
data.result.phone_url | String | TTS音频音素文件URL |
data.result.duration_ms | Integer | TTS合成音频MP3文件音频时长,单位为 ms |
data.result.word_times | List | TTS音频字文件字级别时间戳 ,单位为 ms |
data.result.word_times.begin_ms | Integer | TTS音频文件字开始时间戳,单位为 ms |
data.result.word_times.end_ms | Integer | TTS音频文件字结束时间戳,单位为 ms |
data.result.word_times.text | String | TTS音频文件字文本内容 |
# 响应样例
case1:还在处理
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {}
}
}
case2: 已处理完毕
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {
"audio_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.mp3",
"srt_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.srt",
"phone_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.phone",
"duration_ms": 1000,
"word_times": [
{
"begin_ms": 2080,
"end_ms": 2560,
"text": "字"
},
{
"begin_ms": 2560,
"end_ms": 3040,
"text": "级"
},
{
"begin_ms": 3040,
"end_ms": 3520,
"text": "别"
},
{
"begin_ms": 3520,
"end_ms": 4000,
"text": "时"
},
{
"begin_ms": 4000,
"end_ms": 4480,
"text": "间"
},
{
"begin_ms": 4480,
"end_ms": 4960,
"text": "戳"
} ]
}
}
}
# TTS状态查询(旧)
注:该接口目前处理维护状态,不在更新新功能。建议使用Qid接口。
# 接口描述
根据输入参数返回指定TTS请求的当前状态。
# 请求地址
POST
/api/voice/v1/result/tts
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
request_id | String | True | 请求ID |
# 请求样例
{
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7"
}
# 响应参数
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object | TTS合成结果,如在超时时间内返回,返回此字段否则此字段为空{} |
data.result.audio_url | String | TTS合成音频MP3文件URL |
data.result.srt_url | String | TTS音频字幕SRT文件URL |
data.result.phone_url | String | TTS音频音素文件URL |
data.result.duration_ms | Integer | TTS合成音频MP3文件音频时长,单位为 ms |
data.result.word_times | List | TTS音频字文件字级别时间戳 ,单位为 ms |
data.result.word_times.begin_ms | Integer | TTS音频文件字开始时间戳,单位为 ms |
data.result.word_times.end_ms | Integer | TTS音频文件字结束时间戳,单位为 ms |
data.result.word_times.text | String | TTS音频文件字文本内容 |
# 响应样例
case1:还在处理
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {}
}
}
case2: 已处理完毕
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {
"audio_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.mp3",
"srt_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.srt",
"phone_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.phone",
"duration_ms": 1000,
"word_times": [
{
"begin_ms": 2080,
"end_ms": 2560,
"text": "字"
},
{
"begin_ms": 2560,
"end_ms": 3040,
"text": "级"
},
{
"begin_ms": 3040,
"end_ms": 3520,
"text": "别"
},
{
"begin_ms": 3520,
"end_ms": 4000,
"text": "时"
},
{
"begin_ms": 4000,
"end_ms": 4480,
"text": "间"
},
{
"begin_ms": 4480,
"end_ms": 4960,
"text": "戳"
} ]
}
}
}
# 发起ASR请求
# 接口描述
根据用户传入的音频内容进行解析,将其转写为相应的文本内容。
# 请求地址
POST
/api/voice/v1/request/asr
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
audio_url | String | True | 待识别文本的音频文件URL |
timeout | Integer | False | 等待返回的超时时间,单位为ms。如在超时时间内返回,直接返回ASR结果,否则返回 request_id |
subtitle_max_length | Integer | False | 每行字幕最大长度,默认为0,即不限制长度 |
subtitle_cut_by_punc | Boolean | False | 是否根据标点符号对字幕进行切分换行,默认为false,即不切分 |
word_time | Boolean | False | 是否返回字级别时间戳,默认为false,即不返回 |
# 请求样例
{
"audio_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.mp3",
"timeout": 3000
}
# 响应元素
字段 | 类型 | 描述 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object | ASR请求结果,如在超时时间内返回,返回此字段否则此字段为空{} |
data.result.srt_url | String | ASR音频字幕SRT文件URL |
data.result.text | String | ASR识别结果 |
data.result.word_times | List | ASR音频字文件字级别时间戳 ,单位为 ms |
data.result.word_times.begin_ms | Integer | ASR音频文件字开始时间戳,单位为 ms |
data.result.word_times.end_ms | Integer | ASR音频文件字结束时间戳,单位为 ms |
data.result.word_times.text | String | ASR音频文件字文本内容 |
# 响应样例
case1:请求超时
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {}
}
}
case2:请求未超时,请求成功
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {
"srt_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.srt",
"text": "ASR识别结果",
"word_times": [
{
"begin_ms": 2080,
"end_ms": 2560,
"text": "字"
},
{
"begin_ms": 2560,
"end_ms": 3040,
"text": "级"
},
{
"begin_ms": 3040,
"end_ms": 3520,
"text": "别"
},
{
"begin_ms": 3520,
"end_ms": 4000,
"text": "时"
},
{
"begin_ms": 4000,
"end_ms": 4480,
"text": "间"
},
{
"begin_ms": 4480,
"end_ms": 4960,
"text": "戳"
} ]
}
}
}
# ASR状态查询
# 接口描述
根据输入参数返回指定ASR请求的当前状态。
# 请求地址
POST
/api/voice/v1/result/asr
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
request_id | String | True | 请求ID |
# 请求样例
{
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7"
}
# 响应元素
字段 | 类型 | 说明 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object | ASR请求结果,如在超时时间内返回,返回此字段否则此字段为空{} |
data.result.srt_url | String | ASR音频字幕SRT文件URL |
data.result.text | String | ASR识别结果 |
data.result.word_times | List | ASR音频字文件字级别时间戳 ,单位为 ms |
data.result.word_times.begin_ms | Integer | ASR音频文件字开始时间戳,单位为 ms |
data.result.word_times.end_ms | Integer | ASR音频文件字结束时间戳,单位为 ms |
data.result.word_times.text | String | ASR音频文件字文本内容 |
# 响应样例
case1:请求超时
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {}
}
}
case2:请求未超时,请求成功
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": {
"srt_url": "https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/audio1.srt",
"text": "ASR识别结果",
"word_times": [
{
"begin_ms": 2080,
"end_ms": 2560,
"text": "字"
},
{
"begin_ms": 2560,
"end_ms": 3040,
"text": "级"
},
{
"begin_ms": 3040,
"end_ms": 3520,
"text": "别"
},
{
"begin_ms": 3520,
"end_ms": 4000,
"text": "时"
},
{
"begin_ms": 4000,
"end_ms": 4480,
"text": "间"
},
{
"begin_ms": 4480,
"end_ms": 4960,
"text": "戳"
} ]
}
}
}
# 发起多音字请求
# 接口描述
根据输入参数返回文本中是否包含多音字以及多音字对应的可选择发音。
# 请求地址
POST /api/voice/v1/request/polyphony
# 请求参数
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
query | String | True | 请求文本 |
timeout | Integer | False | 等待返回的超时时间,单位为ms。如在超时时间内返回,直接返回多音字结果,否则返回 request_id |
# 请求样例
{
"query": "待合成语音的文本内容xxxxxx",
"timeout": 3000
}
# 响应元素
字段 | 类型 | 说明 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object List | 多音字请求结果,如在超时时间内返回,返回此字段,否则此字段为空{} |
data.result.text | String | 多音字文本 |
data.result.polyphony | String List | 多音字的可选发音,推荐读音在前,候选读音在后 |
# 响应样例
case1:请求超时
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": []
}
}
case2:请求未超时,请求成功
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": [
{
"text":"待",
"polyphony":["dai4","dai1"]
},
{
"text":"的",
"polyphony":["de5","di4","di1","di2"]
}
]
}
}
# 多音字状态查询
# 接口描述
根据输入参数返回指定多音字请求的当前状态。
# 请求地址
POST /api/voice/v1/result/polyphony
# 请求参数
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
request_id | String | True | 请求ID |
# 请求样例
{
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7"
}
# 响应元素
字段 | 类型 | 说明 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | Object List | 多音字请求结果,如在超时时间内返回,返回此字段,否则此字段为空{} |
data.result.text | String | 多音字文本 |
data.result.polyphony | String List | 多音字的可选发音,推荐读音在前,候选读音在后 |
# 响应样例
case1:还在处理
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": []
}
}
case2:处理完毕
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": [
{
"text":"待",
"polyphony":["dai4","dai1"]
},
{
"text":"的",
"polyphony":["de5","di4","di1","di2"]
}
]
}
}
# 发起翻译请求(暂不支持)
# 接口描述
根据输入的文本以及指定的目标语言,返回翻译后的文本内容。
# 请求地址
POST /api/voice/v1/request/translate
# 请求参数
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
query | String | True | 需要翻译的文本,要求在20万字符以内 |
to | String | True | 输出的文本语言代码,支持语言列表见:语言列表 (opens new window) |
timeout | Integer | False | 等待返回的超时时间,单位为ms。如在超时时间内返回,直接返回翻译结果,否则返回 request_id |
# 请求样例
{
"query": "待翻译的文本内容xxxxxx",
"to": "en",
"timeout": 3000
}
# 响应元素
字段 | 类型 | 说明 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | String | 翻译请求结果,如在超时时间内返回,返回此字段,否则此字段为空{} |
# 响应样例
case1:请求超时
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": []
}
}
case2:请求未超时,请求成功
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": "The text to translate"
}
}
# 翻译状态查询(暂不支持)
# 接口描述
根据输入参数返回指定翻译请求的当前状态。
# 请求地址
POST /api/voice/v1/result/translate
# 请求参数
字段 | 类型 | 必填 | 说明 |
---|---|---|---|
request_id | String | True | 请求ID |
# 请求样例
{
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7"
}
# 响应元素
字段 | 类型 | 说明 |
---|---|---|
code | Integer | code码,见状态表 |
message | String | 状态说明 |
data | Object | 结果数据 |
data.status | Integer | 状态,见状态表 |
data.request_id | String | 请求ID |
data.result | String | 翻译请求结果,如在超时时间内返回,返回此字段,否则此字段为空{} |
# 响应样例
case1:还在处理
{
"code": 0,
"message": "created",
"data": {
"status":1000,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": ""
}
}
case2:处理完毕
{
"code": 0,
"message": "ok",
"data": {
"status":0,
"request_id": "99c3f13f-c2b7-4388-91ff-8f3244d2c5b7",
"result": "The text to translate"
}
}
# 状态表
# 语言检测相关状态
# TTS语言检测请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 处理成功 |
3201 | 拒绝:必填参数缺失 |
3202 | 拒绝:非法的参数--请求文本为空 |
3301 | 请求失败:未能检测到语言 |
# 语言校验相关状态
# TTS语言校验请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 处理成功 |
1201 | 拒绝:必填参数缺失 |
1202 | 拒绝:非法的参数--音色ID为空 |
1203 | 拒绝:非法的参数--请求文本为空 |
1204 | 拒绝:非法的参数--语言为空 |
1205 | 拒绝:非法的参数--音色ID不存在 |
1206 | 拒绝:非法的参数--未知的语言 |
1207 | 拒绝:非法的参数--未知的供应商 |
1301 | 请求失败:未能检测到语言 |
# TTS相关状态
# TTS请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 处理成功 |
1000 | 处理中 |
1002 | 拒绝:必填参数缺失 |
1003 | 拒绝:非法的参数--发音人为空 |
1004 | 拒绝:非法的参数--合成文本为空 |
1005 | 拒绝:非法的参数--发音人不存在 |
1102 | 请求失败,未超时:未连接到服务 |
1103 | 请求失败,未超时:繁忙 |
1104 | 请求失败,未超时:内部错误 |
1105 | 请求失败,未超时:请求超时 |
# TTS请求查询状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 成功 |
1000 | 处理中 |
1102 | 失败:未连接到服务 |
1103 | 失败:繁忙 |
1104 | 失败:内部错误 |
1105 | 失败:请求超时 |
1106 | 失败:未知的request ID |
# ASR相关状态
# ASR请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 请求成功 |
1000 | 请求超时,已创建了新请求 |
2001 | 拒绝:必填参数缺失 |
2002 | 拒绝:非法的参数--音频URL为空 |
2102 | 请求失败,未超时:未连接到服务 |
2103 | 请求失败,未超时:繁忙 |
2104 | 请求失败,未超时:内部错误 |
2105 | 请求失败,未超时:请求超时 |
2106 | 请求失败,未超时:下载音频错误 |
# ASR请求查询状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 成功 |
1000 | 处理中 |
2102 | 失败:未连接到服务 |
2103 | 失败:繁忙 |
2104 | 失败:内部错误 |
2105 | 失败:请求超时 |
2106 | 失败:下载音频错误 |
2107 | 失败:未知的request ID |
# 多音字相关状态
# 多音字请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 处理成功 |
1000 | 处理中 |
5002 | 拒绝:必填参数缺失 |
5004 | 拒绝:非法的参数--合成文本为空 |
5102 | 请求失败,未超时:未连接到服务 |
5103 | 请求失败,未超时:繁忙 |
5104 | 请求失败,未超时:内部错误 |
5105 | 请求失败,未超时:请求超时 |
# 多音字请求查询状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 成功 |
1000 | 处理中 |
5102 | 失败:未连接到服务 |
5103 | 失败:繁忙 |
5104 | 失败:内部错误 |
5105 | 失败:请求超时 |
5106 | 失败:未知的request ID |
# 翻译相关状态
# 翻译请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 请求成功 |
1000 | 处理中 |
3401 | 拒绝:必填参数缺失 |
3402 | 拒绝:非法的参数--请求文本为空 |
3403 | 拒绝:非法的参数--输出语言为空 |
3404 | 拒绝:非法的参数--翻译文本超过20w字 |
3501 | 请求失败,内部错误 |
3502 | 请求失败,请求超时 |
# 音色迁移请求响应状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 处理成功 |
1000 | 处理中 |
1401 | 拒绝:必填参数缺失 |
1402 | 拒绝:非法的参数--音频 URL 为空 |
1403 | 拒绝:非法的参数--vc_id 不存在 |
1404 | 拒绝:非法的参数--音频时长超过10分钟 |
1502 | 请求失败:未连接到VC服务 |
1503 | 请求失败:VC服务内部错误 |
1504 | 请求失败:请求超时 |
1505 | 请求失败:下载音频错误 |
1506 | 请求失败:音频格式错误 |
# 音色迁移请求查询状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 成功 |
1000 | 处理中 |
1404 | 拒绝:非法的参数--音频时长超过10分钟 |
1502 | 失败:未连接到VC服务 |
1503 | 失败:VC服务内部错误 |
1504 | 失败:请求超时 |
1505 | 失败:下载音频错误 |
1506 | 失败:音频格式错误 |
1507 | 失败:未知的request ID |
# 翻译请求查询状态
code | 说明 |
---|---|
0 | 成功 |
x | 失败 |
status | 说明 |
---|---|
0 | 成功 |
1000 | 处理中 |
3501 | 失败:内部错误 |
3502 | 失败:请求超时 |
3503 | 失败:未知的request ID |
# USSML语法说明
# 介绍
USSML(Unified Speech Synthesis Markup Language)旨在归一化各TTS供应商的 SSML(Speech Synthesis Markup Language)语法格式。USSML支持最常用的几个SSML标签:停顿、指定读音、替换合成文本和指定朗读方式,可以满足大部分的语音合成需求。如有 USSML 不支持的标签,用户仍然可以直接使用TTS供应商的SSML语法进行语音合成。
# 使用方式
# 语法格式
USSML 语法格式如下:
<speak sttts:version="0.1">
<break time="string" />
<phoneme ph="string"></phoneme>
<sub alias="string"></sub>
<say-as interpret-as="string"></say-as>
</speak>
除
# 特殊字符
由于使用 XML,USSML 中的特殊字符需要进行转义,如下表所示:
特殊字符 | 转义字符 |
---|---|
& | & |
< | < |
> | > |
" | " |
' | ' |
# 标签说明
# <speak>
<speak>
标签是 USSML 的根标签,用于包裹所有的 USSML 标签。
属性 sttts:version
用于指定 USSML 的版本号,目前 USSML 的版本号为 0.1
。
<speak sttts:version="0.1">
<!-- USSML 标签 -->
</speak>
# <break>
<break>
标签用于指定停顿,其 time
属性用于指定停顿的时长。time
属性的值是一个字符串,单位为秒或毫秒。停顿的最大时长为5秒。例如:
<break time="5s" />
或
<break time="5000ms" />
# <phoneme>
<phoneme>
标签用于指定读音,其 ph
属性用于指定读音的内容。由于不同供应商支持语言范围不同,目前 USSML 中的 <phoneme>
仅支持拼音。拼音用法:字与字的拼音用空格分隔,拼音的数目必须与字数相等。每个拼音由发音和音调组成,音调为1~5的数字编号,其中”5”表示轻声。例如:
<phoneme ph="mai2 mo4">埋没</phoneme>
# 示例
<speak sttts:version="0.1">
你说<phoneme ph="bo2">薄</phoneme>。
<break time="500ms" />
我说<phoneme ph="bao2">薄</phoneme>。
</speak>
# <sub>
<sub>
标签用于在合成过程中替换文本。该标签的 ‘alias’ 属性用于指定要替换的文本内容。合成时,‘alias’ 属性所包含的文本将会取代原始文本进行合成,若有字幕,字幕内容为标签内的原始文本。
<sub>
标签内容与 ‘alias’ 属性的文本均不得为空。
例如:
<sub alias="World Wide Web Consortium">W3C</sub>
# <say-as>
<say-as>
标签允许您使用特定的朗读方式来合成标签内容。该标签的 ‘interpret-as’ 属性用于指定朗读方式。不同的供应商对相同的朗读方式可能产生略微不同的结果。
interpret-as 属性支持多种值,包括:
值 | 说明 | 样例 |
---|---|---|
cardinal | 按照数值方式进行发音 | “1487” 读作 “一千四百八十七” |
digit | 按数字串发音 | “12345” 读作 “一二三四五” |
phone | 按电话号码常用方式发音 | “1301001155” 读作 “幺三零幺零零幺幺五五” |
address | 按地址发音 | “市台路388-301号” 读作 “市台路三八八杠三零幺号” |
date | 按日期发音 | “1998-12-12” 读作 “一九九八年十二月十二日” |
clock | 按时刻发音 | “12:00:12” 读作 “十二点零分十二秒” |
# 示例
<say-as interpret-as="cardinal">12345</say-as>
示例 1:
<speak sttts:version="0.1">
你说<phoneme ph="bo2">薄</phoneme>。
<break time="500ms" />
我说<phoneme ph="bao2">薄</phoneme>。
</speak>
示例 2:
<speak sttts:version="0.1">
<sub alias="World Wide Web Consortium">W3C</sub>
是一个国际性的标准化组织。
</speak>
示例 3:
<speak sttts:version="0.1">
<sub alias="青岛啤酒">TsingTao</sub>
用河南话说就是,
<phoneme ph="qing2 dao1 pi4 jiu1">青岛啤酒</phoneme>。
<say-as interpret-as="cardinal">12345</say-as>
</speak>
以上即为平台提供的语音处理能力相关内容。