首页
看点啥
插画图片
首页 经济看点 讯飞听见实时语音转写API实战开发教程

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

2026-06-26 0

Java调用讯飞听见实时语音转写API需满足音频格式、鉴权签名、WebSocket帧序三条件;须获取AppID/API Key/APISecret,构造带HMAC-SHA256签名的wss URL,发送含language/aue/auf等字段的启动帧,按1280字节PCM帧长采集并推送音频,最后发结束帧。

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

准备开发环境与认证凭证

访问讯飞开放平台官网(https://www.xfyun.cn),完成企业实名认证并登录控制台。

在“我的应用”中创建新应用,服务类型选择【实时语音转写】,开通后记录下【AppID、API Key、APISecret】三项——后续所有签名计算都依赖这组密钥,丢失需重新生成且旧密钥立即失效。

确认本地JDK版本≥1.8,使用Maven管理依赖,在pom.xml中添加:

org.java-websocketJava-WebSocket1.5.1com.alibabafastjson1.2.78

构造合法鉴权URL

讯飞要求每次WebSocket连接前,必须生成带时间戳和HMAC-SHA256签名的wss地址,不能直接拼接固定域名。

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

第二步:对完整参数串做URL编码,再组合成最终URL:wss://rtasr.xfyun.cn/v1/ws?host=rtasr.xfyun.cn&date=...&signature=...

注意:签名密钥由API Key + API Secret拼接生成,不是单独使用任一字段——填错任意一个字符都会导致403 Forbidden错误,且无具体提示。

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

方法一:使用Java-WebSocket库创建客户端,重写onOpen()回调,在连接就绪后立即发送JSON启动帧。

启动帧必须包含language(如zh_cn)、accent(如mandarin)、aue(pcm为raw)、auf(audio/L16;rate=16000)等字段,缺省值不会自动补全,漏填会导致连接后秒断。

方法二:在onOpen()中调用send()发送以下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音频数据

第一步:用javax.sound.sampled.AudioSystem获取目标混音器,设置音频格式为16kHz/16bit/单声道LINEAR,打开TargetDataLine。

第二步:以40ms为单位读取音频缓冲区——16kHz × 16bit × 1ch × 0.04s = 【1280字节】,这是讯飞强制要求的帧长,多1字节或少1字节都会触发frame error并中断会话。

第三步:每读满1280字节,立即通过WebSocket.send()推送二进制数据帧;最后一帧不足1280字节时,必须补零填充至该长度,否则识别结果截断。

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

喜欢(0)

上一篇

讯飞听见开放平台API接入教程及开发指南

讯飞听见开放平台API接入教程及开发指南

下一篇

ClaudePython学习提示词有哪些适合新手的写法

ClaudePython学习提示词有哪些适合新手的写法
猜你喜欢