首页 > 教程攻略 > ai资讯 >讯飞听见实时语音转写API开发实战教程

讯飞听见实时语音转写API开发实战教程

来源:互联网 时间:2026-06-26 08:02:42

要搞定Ja va调用讯飞听见实时语音转写API,让麦克风语音流边录边转、低延迟出文字结果,三个硬性条件必须满足——音频格式、鉴权签名、WebSocket帧序,缺一不可。

先说第一个前提:准备开发环境,拿齐认证凭证。

打开讯飞开放平台官网,完成企业实名认证后登录控制台。在"我的应用"里新建应用,服务类型选【实时语音转写】。开通后记下

AppID、API Key、APISecret

这三个值——后续所有签名计算全靠它们,一旦丢失就得重新生成,旧的密钥会立即失效。

本地JDK版本至少1.8,Ma ven管依赖。在pom.xml里加上这两个库:

org.ja va-websocketJa va-WebSocket1.5.1com.alibabafastjson1.2.78

构造合法鉴权URL

接下来是关键一步:生成带签名的wss地址。讯飞要求每次WebSocket连接前都必须这样做,不能直接拼接固定域名。

具体流程分两步:

第一步,拼原始参数字符串。格式是host=rtasr.xfyun.cn&date=RFC1123格式时间&algorithm=hmac-sha256&headers=host&signature=base64(hmac-sha256(密钥, 签名内容))。特别注意,date必须是GMT时区,前后误差超过15分钟会被直接拒绝连接。

第二步,把这串参数做URL编码,再拼成最终地址:wss://rtasr.xfyun.cn/v1/ws?host=rtasr.xfyun.cn&date=...&signature=...

有一点必须提醒大家:签名密钥是由API Key和API Secret拼接生成的,不是单独用哪一个字段。填错任何一个字符,都会收到403 Forbidden错误,而且没有具体提示——排查起来相当头疼。

建立WebSocket连接并发送启动参数

用Ja va-WebSocket库创建客户端,重写onOpen()回调。连接成功后,得立刻发送JSON启动帧。

启动帧的字段一个都不能少:language(比如zh_cn)、accent(mandarin)、aue(pcm用raw)、auf(audio/L16;rate=16000)。缺省值不会自动补全,漏填了服务器会秒断链接。

可以参考这个JSON结构:

{"common":{"app_id":"你的AppID"},"business":{"language":"zh_cn","accent":"mandarin","domain":"iat","aue":"raw","auf":"audio/L16;rate=16000","ent":"general"},"data":{"status":0,"format":"audio","encoding":"raw","sample_rate":16000,"channel":1,"bit_depth":16}}

务必在WebSocket状态变为OPEN后立刻发送,延迟超过3秒服务器就会主动关闭连接。

采集并分帧推送PCM音频数据

这一步是技术含量最高的部分。用ja vax.sound.sampled.AudioSystem获取目标混音器,设置音频格式为16kHz/16bit/单声道LINEAR,打开TargetDataLine。

以40ms为单位读取音频缓冲区——16kHz × 16bit × 1ch × 0.04秒 =

1280字节

。这个数字是讯飞强制要求的帧长,多一字节或少一字节都会触发frame error,直接中断会话。

每读满1280字节,就通过WebSocket.send()推送二进制数据帧。最后一帧不足1280字节时,必须用零补满长度,否则识别结果会被截断。

全部音频发送完毕后,发结束帧:{"data":{"status":2}},通知服务端停止识别并返回最终结果。

这就是整套流程。音频格式、鉴权签名、WebSocket帧序这三个条件好了,实时语音转写就能跑起来。

相关阅读