讯飞语音-语音听写

讯飞语音听写提供高精度实时语音转文字服务,除中文普通话和英文外,支持65个语种、23种方言和1个民族语言,适用于会议记录、课堂笔记、智能客服等场景。

概述

  1. 讯飞语音听写(iFLYTEK Speech-to-Text)是科大讯飞提供的高精度语音识别(ASR)服务,能够将用户的实时语音快速、准确地转换为文字,适用于会议记录、笔记整理、字幕生成等多种场景。
  2. 语音听写流式接口,用于1分钟内的即时语音转文字技术,支持实时返回识别结果,达到一边上传音频一边获得识别文本的效果。会话时长最多持续60s,或者超过10s未发送数据,服务端会主动断开连接。
  3. 该语音能力是通过Websocket API的方式给开发者提供一个通用的接口。Websocket API具备流式传输能力,适用于需要流式数据传输的AI服务场景,比如边说话边识别。
  4. 支持多语种和方言、个性化热词、动态修正。
  5. 动态修正:
    • 未开启动态修正:实时返回识别结果,每次返回的结果都是对之前结果的追加。
    • 开启动态修正:实时返回识别结果,每次返回的结果有可能是对之前结果的追加,也有可能是要替换之前某次返回的结果(即修正)。
    • 使用动态修正功能直接设置相应参数即可使用,参数设置方法:dwa=wpgs
    • 动态修正功能仅中文支持。
  6. 语音听写 WebAPI 默认支持50路并发,SDK不支持并发。
  7. 常见问题:常见问题

在线体验

官网:实时语音听写

官方Demo 说明

  1. 讯飞语音听写(iFlytek Speech-to-Text)提供了多个不同版本的 Demo,以满足不同开发环境和使用场景的需求。
  2. JAVA-SDK-DEMO调用参考教程:AI大学堂
  3. 下载地址:调用示例

image-20250827000159463

两种调用方式

  1. 讯飞语音听写提供了两种接口调用方式:基于 WebSocket 的 Web API 接口、各个平台的 SDK。
WebAPISDK
平台兼容性✅ 高(前端、后端都能用)❌ 限制较多
鉴权签名需要手动实现自动封装
音频采集自行实现内建
是否离线支持❌ 否✅ 部分平台支持
上手难度中(需掌握音频编码等)低(只需调用)
性能依赖云端设备性能、网络或本地模型

WebAPI 方式

  1. 优点
    • 跨平台:只要能发 HTTP/WebSocket 请求就能用,适合前端、Node.js、小程序等。
    • 轻量灵活:无需集成 SDK,不受平台约束。
    • 云端识别:不依赖本地计算,效果与云端模型保持一致。

  1. 缺点
    • 需要处理鉴权签名(HMAC),通常放到后端实现。
    • 音频处理需自行实现(浏览器中使用 MediaRecorder / AudioContext 等)。

  1. 常见使用场景
    • 前端 Web 项目(如浏览器语音输入、会议字幕)
    • 微信小程序
    • 低资源客户端或跨平台需求

SDK 方式

  1. 优点
    • 本地封装更完整:提供内建录音、音频处理、状态管理等功能。
    • 可能支持离线识别(如 Android 端 SDK 支持本地模型)。
    • 鉴权和签名由 SDK 管理,开发更方便。

  1. 缺点
    • 平台相关性强:要根据平台(Android、Windows、Linux)分别引入 SDK。
    • 不适用于纯 Web 页面。

  1. 常见使用场景
    • 移动端 App(Android、iOS)
    • 本地桌面应用(Windows、Linux)
    • 有更强控制需求、或需要离线语音识别的业务

跑通 官方Demo

JS 语言Demo

Warning

直接在Web客户端使用API密钥调用讯飞语音听写服务存在严重的安全风险。密钥一旦暴露,可能导致恶意滥用和费用损失。所以,一般在服务端生成鉴权的 URL,然后返回给前端。但是,即使让后端生成URL,也会有一定的安全隐患。因为URL可以复用,如果签名的有效时间比较长,比如几分钟甚至几小时,那这段时间内这个 URL 可以被他人复用,实现“重放攻击”。即使你设置了时间戳签名,如果攻击者能快速抓到当前请求,也能立即转发或用在其他客户端中。所以,一般不建议前端直接连接讯飞的语音服务接口

下载Demo

下载地址:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B


image-20250827001639124

获取 API 密钥

  1. 进入控制台 → 「我的应用」→「创建新应用」, 我的应用
  2. 在左边侧边栏找到:语音识别 → 语音听写(流式版),语音听写
  3. 获取Websocket服务接口认证信息

image-20250827002053875

配置密钥

example/iat/index.html 中配置API 密钥

image-20250827002251391

运行测试

  1. ⚠️ 由于浏览器安全限制,直接打开 index.html 可能无法录音。需通过以下方式运行:
    • 方法1:使用 VS Code 的 Live Server 插件
    • 方法2:本地 HTTP 服务
  2. VS Code 安装Live Server插件。
  3. 使用Live Server打开example/iat/index.html
  4. 点击 「开始录音」 按钮(浏览器会请求麦克风权限,需允许)

image-20250827002513711

JAVA 语言Demo

Tip

在生产环境中,强烈建议由后端统一调用讯飞的 WebAPI 接口,而不是让前端直接访问讯飞服务

下载Demo

下载地址:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B

官方文档:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E


image-20250827003433948

获取 API 密钥

获取 API 密钥

配置密钥

WebIATWS 类中配置静态常量

image-20250827004856719

运行测试

  1. ⚠️ 启动程序,可能出现下面的错误

image-20250827005001753

我们需要替换一下lib目录下的JAR包

JAR包下载地址:okhttp

JAR包下载地址:okio

🤔 好像直接换 okio-1.17.5.jar 就可以了

image-20250827005428046
  1. ⚠️ 再次运行程序,可能会出现以下错误

image-20250827005558468

因为在 WebIATWS 类中,文件路径使用了 Windows 风格的反斜杠路径,为了提高跨平台兼容性,建议将路径改为使用正斜杠或使用 Java 的 File.separator 来构建路径。

image-20250827005720954

  1. ✅ 重新运行程序,进行测试

image-20250827005810985

JAVA-SDK-DEMO

下载Demo

下载地址:https://github.com/iFLYTEK-OP/websdk-java-demo

官方文档:https://www.xfyun.cn/doc/asr/voicedictation/Java-SDK.html


image-20250827010048916

获取 API 密钥

获取 API 密钥

配置密钥

参考 README.md,在 src/main/resources/test.properties 下进行配置

image-20250827010249866

运行测试

运行 IatClientApp 类的main方法

image-20250827010352586

可以修改main方法,切换到方式二,处理麦克风输入的音频数据

image-20250827010507814

image-20250827010538612

注意事项

WebSocket注意事项

  1. 服务端支持的 websocket-version 为13,请确保客户端使用的框架支持该版本。
  2. 服务端返回的所有的帧类型均为TextMessage,对应于原生websocket的协议帧中opcode=1,请确保客户端解析到的帧类型一定为该类型,如果不是,请尝试升级客户端框架版本,或者更换技术框架。
  3. 如果出现分帧问题,即一个json数据包分多帧返回给了客户端,导致客户端解析json失败。出现这种问题大部分情况是客户端的框架对websocket协议解析存在问题,如果出现请先尝试升级框架版本,或者更换技术框架。
  4. 客户端会话结束后如果需要关闭连接,尽量保证传给服务端的错误码为websocket错误码1000(如果客户端框架没有提供关闭时传错误码的接口。则无需关注本条)。

白名单

  1. 默认关闭IP白名单,即该服务不限制调用IP。
  2. 若打开IP白名单,则服务端会检查调用方IP是否在讯飞开放平台配置的IP白名单中,对于没有配置到白名单中的IP发来的请求,服务端会拒绝服务。
  3. IP白名单需设置为外网IP,请勿设置局域网IP。
  4. 不同Appid的不同服务都需要分别设置IP白名单。
  5. 如果握手阶段返回{"message":"Your IP address is not allowed"},则表示由于IP白名单配置有误或还未生效,服务端拒绝服务。

image-20250827010811227

调用流程说明

参考官方文档:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E6%B5%81%E7%A8%8B


  1. 建立WebSocket连接的时候,请求地址需要携带接口鉴权的必要参数。通过接口密钥基于hmac-sha256计算签名,向服务器端发送WebSocket协议握手请求。
  2. 握手成功后,客户端通过WebSocket连接同时上传和接收数据。数据上传完毕,客户端需要上传一次数据结束标识。
  3. 接收到服务器端的结果全部返回标识后断开WebSocket连接。

简单实现

以下是一个前端直接调用讯飞语音 API 的完整示例。这个示例包括了语音的采集、与讯飞 WebAPI 建立 WebSocket 连接,并实时显示语音识别的结果。

语音听写Demo

相关文章

评论区