实时语音翻译
更新时间:2022-12-02
接口描述
实时语音翻译api采用websocket协议的连接方式,能够将音频流实时识别为文字,支持智能断句,实时输出带有标点的语音识别结果和翻译结果,支持45个语种的识别和相互翻译。
接口限制
- 目前支持45个语言的互译,见语言列表
-
音频参数要求:目前只支持pcm格式的原始音频数据
- 采样率:8kHz、16kHz、44.1kHz
- 位深:16bits
- 单声道
- 小端序
接入方式
- 接口协议:
WebSocket
- 请求URL:
wss://aip.baidubce.com/ws/realtime_speech_trans
主要流程
实时语音翻译API基于WebSocket协议进行全双工的流式消息发送和接受。实现逻辑如下:
- 建立WebSocket连接,并发送开始报文
- 发送实时音频流报文
- 接收实时翻译结果报文、TTS播报报文
- 发送结束报文并关闭WebSocket连接
报文格式
方向 | 报文类型 | WebSocket opcode | WebSocket消息体序列化协议 |
---|---|---|---|
客户端请求报文 | 开始报文 | text | json |
实时音频报文 | binary | 无。音频原始二进制数据 | |
结束报文 | text | json | |
服务端响应报文
|
确认开始报文 | text | json |
实时翻译结果报文 | text | json | |
TTS播报报文 | binary | 实时语音翻译二进制响应报文序列化协议(见下) | |
确认结束报文 | text | json |
实时语音翻译二进制响应报文序列化协议
该协议仅在头部加了1个字节,作用是区分业务二进制响应报文的类型。第一个字节之后是payload数据。格式如下:
0字节 1字节
+---------+----------------+
| type | payload +
+---------+----------------+
type取值 | 报文类型 |
---|---|
0x01 | TTS播报报文 |
请求说明
建立连接并发送开始报文
向服务地址建立WebSocket连接,连接开始后,需要首先发送开始报文。
请求报文格式
WebSocket opcode
:text
- WebSocket消息体序列化协议:
json
字段名 | 类型 | 是否必填 | 字段说明 |
---|---|---|---|
type | string | 必填,固定值 | START |
from | string | 必填 | 源语言,具体参考语言列表 |
to | string | 必填 | 目标语言,具体参考语言列表 |
app_id | string | 必填 | 用户app id |
app_key | string | 必填 | 用户app key |
sampling_rate | int | 必填 | 采样率:8000、16000、44100 |
return_target_tts | bool | 选填 | 是否返回翻译结果的TTS播报结果
|
tts_speaker | string | 选填 | tts播报人声选项,当前目标语言是英语时支持配置:
|
user_sn | string | 选填 | 用户输入sn |
- 开始报文示例:
{
"type": "START",
"from": "zh",
"to": "en",
"app_id": "xxx",
"app_key": "yyy",
"sampling_rate": 16000
}
响应报文格式
WebSocket opcode
:text
- WebSocket消息体序列化协议:
json
字段名 | 类型 | 说明 |
---|---|---|
code | int | 错误码(具体见错误码说明) |
msg | string | 错误信息 |
data | object | 请求结果,当且仅当code==0 存在 |
data.status | string | 固定值STA :开始报文校验成功 |
若服务端接受,服务端会返回确认开始报文:
- 确认开始报文
{
"code": 0,
"msg": "Success",
"data": {
"status": "STA"
}
}
若服务端拒绝,会返回错误报文,并立刻断开和客户端的连接:
- 错误报文
{
"code": 10001,
"msg": "invalid request param"
}
发送实时音频流报文
报文格式
WebSocket opcode
:binary
- WebSocket消息体:音频流的二进制数据
注意:
- 服务端不处理在开始报文响应之前收到的音频流。
- 建议每40ms发送一次音频包,即在采样率为16000Hz+位深16bits时,音频包的大小为 40ms 16000Hz 16bits = 1280 bytes。如果发送频率太高,则可能识别失败;如果发送频率太低,则会降低业务系统的实时性。
- 若服务端超过30秒没有收到任何报文,服务端会报错并主动断开连接
接受实时翻译结果报文
报文格式:
WebSocket opcode
:text
- WebSocket消息体序列化协议:
json
字段名 | 类型 | 说明 |
---|---|---|
code | int | 错误码(具体见错误码说明) |
msg | string | 错误信息 |
data | object | 请求结果,当且仅当code==0 存在 |
data.status | string | 状态标识
|
data.result | object | |
data.result.type | string | 结果类型:
|
data.result.asr | string | 一句话的中间识别结果 |
data.result.asr_trans | string | 中间翻译结果 |
data.result.sentence | string | 一句话的最终识别结果 |
data.result.sentence_trans | string | 最终翻译结果 |
正常情况
- 一句话的翻译中间结果
{
"code": 0,
"msg": "Success",
"data": {
"status": "TRN",
"result": {
"type": "MID",
"asr": "今天",
"asr_trans": "Today",
"sentence": "",
"sentence_trans": ""
}
}
}
- 一句话的翻译最终结果
{
"code": 0,
"msg": "Success",
"data": {
"status": "TRN",
"result": {
"type": "FIN",
"asr": "明天",
"asr_trans": "",
"sentence": "今天天气不错,",
"sentence_trans": "It's a nice day today,"
}
}
}
异常情况
有些错误并不会断开连接,并且不会不影响业务继续使用,请参考错误码说明。
- 错误报文
{
"code": 10001,
"msg": "invalid request param"
}
接受TTS播报报文
如果开始报文中设置了return_target_tts==1
时,则会返回TTS播报报文;否则不返回该报文。
报文格式:
WebSocket opcode
:binary
- WebSocket消息体序列化协议:实时语音翻译二进制响应报文,
type=0x01
,payload是TTS音频二进制,以mp3格式编码。
即:
- WebSocket消息体
0字节 1字节
+---------+---------------------+
| 0x01 | mp3格式的TTS二进制数据 +
+---------+---------------------+
发送结束报文并关闭连接
请求报文格式
WebSocket opcode
:text
- WebSocket消息体序列化协议:
json
字段名 | 字段类型 | 是否必填 | 字段说明 |
---|---|---|---|
type | string | 必填,固定值 | FINISH |
{
"type": "FINISH"
}
响应报文格式
WebSocket opcode
:text
- WebSocket消息体序列化协议:
json
字段名 | 类型 | 说明 |
---|---|---|
code | int | 错误码(具体见错误码说明) |
msg | string | 错误信息 |
data | object | 请求结果,当且仅当code==0 存在 |
data.status | string | 状态标识END |
若服务端接受,服务端会返回确认结束报文:
- 确认报文结束
{
"code": 0,
"msg": "Success",
"data": {
"status": "END"
}
}
若服务端拒绝,会返回错误报文。
- 错误报文
{
"code": 10001,
"msg": "invalid request param"
}
错误码说明
错误码 | 错误信息 | 解决方案 |
---|---|---|
0 | 成功 | |
10000 | 服务器未知错误 | 记录报错信息反馈服务方 |
10001 | 参数错误 | 检查报文格式 |
10008 | 并发超限 | 请降低并发数 |
20302 | 语言方向不支持 | 检查开始报文参数(from 和to ) |
20303 | 重复发送开始报文 | 不要重复发送开始报文 |
20311 | 语音识别失败 | 记录报错信息反馈服务方。这一句报错,不影响后续识别 |
20312 | 文本翻译失败 | 记录报错信息反馈服务方。这一句报错,不影响后续翻译 |
20313 | 获取TTS失败 | 记录报错信息反馈服务方,这一句报错,不影响后续TTS合成 |
20314 | 超时未收到报文 | 服务端超过30秒没有收到报文 |
20315 | 翻译结果为空 | 反馈给服务方。这一句报错,不影响后续翻译 |
20316 | 无效音频 | 请检查音频并重试 |
31003 | app id and app key do not match | 用户appid和appkey不匹配,信息校验失败 |
31004 | input parameter format error | 用户输入参数解析出错 |
31005 | resolve user parameters | 用户输入参数解析出错 |
31006 | type format error | 记用户输入帧类型出错(type字段) |
31007 | frame type error | 用户输入帧格式出错,可能是为校验成功,但是发送了数据帧 |
31008 | user connect had close | 用户连接断开,但是仍在发送帧 |
41000 | inner server error! | 内部服务错误 |
41001 | inner server error! | 内部服务错误 |
41002 | inner server error! | 内部服务错误 |
41015 | Open api concurrency limit reached! | 用户并发数超限 |
41017 | Open api usage limit reached! | 用户没有使用时长 |
语言列表
编号 | 名称 | 代码 | 编号 | 名称 | 代码 | 编号 | 名称 | 代码 |
---|---|---|---|---|---|---|---|---|
1 | 中文(普通话) | zh | 21 | 罗马尼亚语 | rom | 41 | 塞尔维亚语(拉丁文) | srp |
2 | 英语 | en | 22 | 瑞典语 | swe | 42 | 斯瓦希里语(坦桑尼亚) | swa |
3 | 粤语 | yue | 23 | 匈牙利语 | hu | 43 | 土耳其语 | tr |
4 | 日语 | jp | 24 | 越南语 | vie | 44 | 乌克兰语 | ukr |
5 | 韩语 | kor | 25 | 印度尼西亚语 | id | 45 | 亚美尼亚语 | arm |
6 | 法语 | fra | 26 | 加泰罗尼亚语 | cat | |||
7 | 西班牙语 | spa | 27 | 希伯来语 | heb | |||
8 | 泰语 | th | 28 | 印地语 | hi | |||
9 | 阿拉伯语(巴林) | ara | 29 | 马来语 | may | |||
10 | 俄语 | ru | 30 | 挪威语 | nor | |||
11 | 葡萄牙语 | pt | 31 | 冰岛语 | ice | |||
12 | 德语 | de | 32 | 菲律宾语 | fil | |||
13 | 意大利语 | it | 33 | 高棉语 | hkm | |||
14 | 希腊语 | el | 34 | 克罗地亚语 | hrv | |||
15 | 荷兰语 | nl | 35 | 拉脱维亚语 | lav | |||
16 | 波兰语 | pl | 36 | 孟加拉语 | ben | |||
17 | 保加利亚语 | bul | 37 | 尼泊尔语 | nep | |||
18 | 丹麦语 | dan | 38 | 南非荷兰语 | afr | |||
19 | 芬兰语 | fin | 39 | 斯洛伐克语 | sk | |||
20 | 捷克语 | cs | 40 | 僧伽罗语 | sin |
TTS语音合成语言列表
编号 | 语言名称 | 语言标签 | 默认播报人声 | 可选播报人声(tts_speaker参数) |
---|---|---|---|---|
1 | 中文 | zh | 男声 | - |
2 | 英文 | en | 女声 |
|
3 | 粤语 | yue | 女声 | - |
4 | 日语 | jp | 女声 | - |
5 | 泰语 | th | 女声 | - |
6 | 韩语 | kor | 女声 | - |
7 | 德语 | de | 女声 | - |
8 | 西班牙语 | spa | 女声 | - |
9 | 法语 | fra | 女声 | - |
10 | 葡萄牙语 | pt | 女声 | - |
11 | 俄语 | ru | 女声 | - |
12 | 越南语 | vie | 男声 | - |
13 | 阿拉伯语 | ara | 男声 | - |
14 | 南非何兰语 | afr | 女声 | - |
15 | 亚美尼亚语 | arm | 男声 | - |
16 | 印度尼西亚语 | id | 男声 | - |
17 | 马来语 | may | 男声 | - |
18 | 孟加拉语 | ben | 女声 | - |
19 | 加泰罗尼亚语 | cat | 女声 | - |
20 | 捷克语 | cs | 男声 | - |
21 | 丹麦语 | dan | 女声 | - |
22 | 罗克地亚语 | hrv | 男声 | - |
23 | 冰岛语 | ice | 女声 | - |
24 | 意大利语 | it | 女声 | - |
25 | 拉脱维亚语 | lav | 女声 | - |
26 | 匈牙利语 | hu | 男声 | - |
27 | 何兰语 | nl | 女声 | - |
28 | 尼泊尔语 | nep | 男声 | - |
29 | 挪威语 | nor | 女声 | - |
30 | 波兰语 | pl | 女声 | - |
31 | 罗马尼亚语 | rom | 男声 | - |
32 | 僧伽罗语 | sin | 男声 | - |
33 | 斯洛伐克语 | sk | 男声 | - |
34 | 斯洛文尼亚语 | slo | 男声 | - |
35 | 斯瓦希里语 | swa | 男声 | - |
36 | 芬兰语 | fen | 女声 | - |
37 | 瑞典语 | swe | 女声 | - |
38 | 土耳其语 | tr | 女声 | - |
39 | 希腊语 | el | 男声 | - |
40 | 保加利亚语 | bul | 男声 | - |
41 | 塞尔维亚语 | srp | 男声 | - |
42 | 乌克兰语 | ukr | 女声 | - |
43 | 希伯来语 | heb | 男声 | - |
44 | 波斯语 | per | 男声 | - |
45 | 印地语 | hi | 女声 | - |