注意:
此接口为实时语音翻译接口,在参数风格、错误码等方面有区别于云 API 接口,请知悉。
接口描述
本接口服务采用 WebSocket 协议,对实时音频流进行识别翻译,同步返回识别翻译后的结果,达到一边说一边翻译的效果。
接口要求
集成实时语音翻译 API 时,需按照以下要求。
内容 | 说明 |
语言种类 | 支持中文、英语等语言的互译。可通过接口参数 source 和 target 设置对应语言类型。 |
音频属性 | 采样率:16000Hz 采样精度:16bits 声道:单声道(mono) |
音频格式 | pcm、wav、mp3 |
请求协议 | wss 协议 |
请求地址 | wss://asr.cloud.tencent.com/asr/speech_translate/?{请求参数} |
接口鉴权 | |
响应格式 | 统一采用 JSON 格式。 |
数据发送 | 建议每200ms发送200ms时长(即1:1实时率)的数据包,对应 PCM 大小为:16k采样率6400字节。 音频发送速率过快超过1:1实时率或者音频数据包之间发送间隔超过6秒,可能导致引擎出错,后台将返回错误并主动断开连接。 |
并发限制 |
接口调用流程
接口调用流程分为两个阶段:握手阶段和识别翻译阶段。两阶段后台均返回 text message,内容为 JSON 序列化字符串,以下是格式说明:
字段名 | 类型 | 描述 |
code | Integer | 状态码,0代表正常,非0值表示发生错误。 |
message | String | 错误说明,发生错误时显示这个错误发生的具体原因,随着业务发展或体验优化,此文本可能会经常变更或更新。 |
voice_id | String | 音频流全局唯一标识,一个 WebSocket 连接对应一个,用户自己生成(推荐使用 UUID),最长128位。 注意:每次建立 WebSocket 连接都必须重新生成 voice_id,任何情况下中断了翻译或者 WebSocket 连接(如连接失败、正常结束、翻译返回错误码等),voice_id 作废,重新发起翻译必须使用新的 voice_id。 |
sentence_id | String | 当前句唯一 ID。 |
result | Result | 最新语音翻译结果。 |
final | Integer | 该字段返回1时表示音频流全部翻译结束。 |
其中翻译结果 Result 结构体格式为:
字段名 | 类型 | 描述 |
source | String | 源语言类型,如 "zh"、"en"、"auto" 等。 zh:中文 en:英文 auto:中英混 示例值:zh |
target | String | 目标语言类型,如 "zh"、"en"、"auto" 等。 zh:中文 en:英文 auto:中英混 示例值:en |
source_text | String | 识别出的源语言文本内容,编码为 UTF-8。 示例值:ASR 语音识别结果 |
target_text | String | 翻译后的目标语言文本内容,编码为 UTF-8。 示例值:ASR speech recognition results |
start_time | Integer | 当前句子在整个音频流中的起始时间,单位毫秒。 示例值:1000 |
end_time | Integer | 当前句子在整个音频流中的结束时间,单位毫秒。 示例值:3000 |
sentence_end | Boolean | 当前句子是否结束。true表示句子结束,false表示句子未结束。 示例值:true |
握手阶段
请求格式
握手阶段,客户端主动发起 WebSocket 连接请求,请求 URL 格式为:
wss://asr.cloud.tencent.com/asr/speech_translate/<appid>?{请求参数}
key1=value2&key2=value2...
参数说明:
参数名称 | 必填 | 类型 | 描述 |
secretid | 是 | String | 示例值:*****Qq1zhZMN8dv0****** |
signature | 是 | String | 接口签名参数 示例值:*****g1JfeBi%2FYnTjyjekxfDA%3D |
timestamp | 是 | Integer | 当前 UNIX 时间戳,单位为秒。如果与当前时间相差过大,会引起签名过期错误。 示例值:1745932688 |
expired | 是 | Integer | 签名的有效期截止时间 UNIX 时间戳,单位为秒。expired 必须大于 timestamp 且 expired - timestamp 小于90天。 示例值:1746019088 |
nonce | 是 | Integer | 随机正整数。用户需自行生成,最长10位。 示例值:8743357 |
voice_id | 是 | String | 音频流全局唯一标识,一个 WebSocket 连接对应一个,用户自己生成(推荐使用 UUID),最长128位。 注意:每次建立 WebSocket 连接都必须重新生成 voice_id,任何情况下中断翻译或者 WebSocket 连接(如连接失败、正常结束、翻译返回错误码等),voice_id 作废,重新发起翻译必须使用新的 voice_id 示例值:TBgVFCsxdn3i2DGt |
voice_format | 是 | Integer | 语音编码方式。 1:pcm;8:mp3;12:wav 示例值:1 |
source | 是 | String | 源语言类型。支持的语言类型: zh:中文 en:英文 auto:中英混 示例值:zh |
target | 是 | String | 目标语言类型。各源语言的目标语言支持列表如下: zh(中文):zh(中文)、en(英文) en(英文):zh(中文)、en(英文) auto(中英混):auto(中英混) 示例值:en |
trans_model | 是 | String | 翻译模型类型。支持的模型: hunyuan-translation-lite:轻量版 hunyuan-translation:标准版 示例值:hunyuan-translation-lite |
signature 签名生成
1. 对除 signature 之外的所有参数按字典序进行排序,拼接请求 URL (不包含协议部分:wss://)作为签名原文,这里以
appid=125922***,secretid=*****Qq1zhZMN8dv0****** 为例拼接签名原文,则拼接的签名原文为:asr.cloud.tencent.com/asr/speech_translate/125922***?expired=1673494772&nonce=1673408372&secretid=*****Qq1zhZMN8dv0******&source=zh&target=en×tamp=1673408372&trans_model=hunyuan-translation-lite&voice_format=1&voice_id=c64385ee-3e5c-4fc5-bbfd-7c71addb35b0
2. 对签名原文使用 SecretKey 进行 HMAC-SHA1 加密,之后再进行 base64 编码。例如对上一步的签名原文,
secretkey=*****SkqpeHgqmSz*****,使用 HMAC-SHA1 算法进行加密并做 base64 编码处理:Base64Encode(HmacSha1("asr.cloud.tencent.com/asr/speech_translate/125922***?expired=1673494772&nonce=1673408372&secretid=*****Qq1zhZMN8dv0******&source=zh&target=en×tamp=1673408372&trans_model=hunyuan-translation-lite&voice_format=1&voice_id=c64385ee-3e5c-4fc5-bbfd-7c71addb35b0", "*****SkqpeHgqmSz*****"))
得到 signature 签名值为:
G8jDQBRg1JfeBi/YnTjyjekxfDA=
3. 将 signature 值进行 urlencode(必须进行 URL 编码,编码函数必须要支持对+、=等特殊字符的编码,否则将导致鉴权失败偶现)后拼接得到最终请求 URL 为:
wss://asr.cloud.tencent.com/asr/speech_translate/125922****?expired=1673494772&nonce=1673408372&secretid=A*********************************0r&source=zh&target=en×tamp=1673408372&trans_model=hunyuan-translation-lite&voice_format=1&voice_id=c64385ee-3e5c-4fc5-bbfd-7c71addb35b0&signature=G8jDQBRg1JfeBi%2FYnTjyjekxfDA%3D
请求响应
客户端发起连接请求后,后台建立连接并进行签名校验,校验成功则返回 code 值为0的确认消息表示握手成功;如果校验失败,后台返回 code 为非0值的消息并断开连接。
{"code":0,"message":"success","voice_id":"RnKu9FODFHK5FPpsrN"}
翻译阶段
握手成功之后,进入翻译阶段,客户端上传语音数据并接收翻译结果消息。
上传数据
在翻译过程中,客户端持续上传 binary message 到后台,内容为音频流二进制数据。建议每 200ms 发送 200ms 时长(即1:1实时率)的数据包,对应 PCM 大小为:16k 采样率6400字节。音频发送速率过快超过1:1实时率或者音频数据包之间发送间隔超过6秒,可能导致引擎出错,后台将返回错误并主动断开连接。
音频流上传完成之后,客户端需发送以下内容的 text message,通知后台结束翻译。
{"type": "end"}
接收消息
客户端上传数据的过程中,需要同步接收后台返回的实时翻译结果,结果示例:
{"code":0,"message":"success","voice_id":"RnKu9FODFHK5FPpsrN","sentence_id":"0669d099-ffdf-404e-ad91-5eaff18b20df","result":{"source":"zh","target":"en","source_text":"实时","target_text":"Real time","start_time":0,"end_time":1240,"sentence_end":false}}
{"code":0,"message":"success","voice_id":"RnKu9FODFHK5FPpsrN","sentence_id":"0669d099-ffdf-404e-ad91-5eaff18b20df","result":{"source":"zh","target":"en","source_text":"实时语音翻译","target_text":"Real time voice translation","start_time":0,"end_time":2840,"sentence_end":true}}
后台翻译完所有上传的语音数据之后,最终返回 final 值为1的消息并断开连接。
{"code":0,"message":"success","voice_id":"CzhjnqBkv8lk5pRUxhpX","final":1}
翻译过程中如果出现错误,后台返回 code 为非0值的消息并断开连接。
{"code":6008,"message":"客户端超过15秒未发送音频数据。","voice_id":"CzhjnqBkv8lk5pRUxhpX"}
开发者资源
SDK
Tencent Cloud Speech SDK for Go:GitHub
Tencent Cloud Speech SDK for Python:GitHub
SDK 调用示例
错误码
数值 | 说明 |
6000 | 音频数据发送过多,请1秒内最多发送3秒音频数据。 注意:实时翻译的效果是"边说边出识别翻译的结果",1秒内发送的音频数据总时长应为1秒。 |
6001 | 参数不合法。 |
6002 | 鉴权失败。 |
6003 | 账号未开通本服务,请在控制台开通服务。 |
6004 | 资源包耗尽,请开通后付费或者购买资源包。 |
6005 | 账户欠费停止服务,请及时充值。 |
6006 | 账号当前调用并发超限。 |
6007 | 音频解码失败,请检查上传音频数据格式与调用参数一致。 |
6008 | 客户端超过15秒未发送音频数据。 |
6009 | 客户端连接断开。 |
6010 | 客户端上传未知文本消息。 |
6011 | 分片音频数据太大,请按照文档指引调整分片大小。 |
6012 | 因机器负载过高、网络抖动等导致失败,请重新发起新请求。 注意:该问题通常为偶发,少量出现可忽略,发起新请求即可。 |
6013 | 因机器负载过高、网络抖动等导致失败,请重新发起新请求。 注意:该问题通常为偶发,少量出现可忽略,发起新请求即可。 |
7000 | 因机器负载过高、网络抖动等导致失败,请重新发起新请求。 注意:该问题通常为偶发,少量出现可忽略,发起新请求即可。 |