讯飞语音听写WebApi(流式)【React Native版】
假设已有 Base64 编码的音频文件(16kHz, s16le, pcm)
1、获取websocket url
import * as CryptoJS from 'crypto-js';/*** 获取websocket url*/
const getWebSocketUrl = () => {const config = {// 请求地址hostUrl: "wss://iat-api.xfyun.cn/v2/iat",host: "iat-api.xfyun.cn",//在控制台-我的应用-语音听写(流式版)获取appid: '',apiSecret: '', // 替换为你的 APISecretapiKey: '', // 替换为你的 APIKeyfile: "./16k_10.pcm", //请填写您的音频文件路径uri: "/v2/iat",highWaterMark: 1280}const date = new Date().toUTCString()// 鉴权签名let signatureOrigin = `host: ${config.host}\ndate: ${date}\nGET ${config.uri} HTTP/1.1`let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, config.apiSecret);let signature = CryptoJS.enc.Base64.stringify(signatureSha)let authorizationOrigin = `api_key="${config.apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`let authStr = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(authorizationOrigin))let wssUrl = `${config.hostUrl}?authorization=${authStr}&date=${encodeURIComponent(date).replace(/%2C/g, ',').replace(/%3A/g, ':')}&host=${config.host}`return wssUrl
}
2、建立连接并发送数据
需要注意的是如果 base64 数据很大不能一次发送完成,就需要将 base64 重新转为二进制数据后按需要的大小切割,然后将切割后的二进制片段再重新转为 base64 编码后发送,否则服务端无法正确读取数据。
import { Buffer } from 'buffer'; // 导入 Buffer// 如果有socket地址
const url = getWebSocketUrl();
const ws = new WebSocket(url);
ws.onopen = () => {console.log("🚀 ~ 连接成功")const params = {common: { app_id: '' },//appIdbusiness: {language: "zh_cn",domain: "iat",accent: "mandarin",vad_eos: 5000,dwa: "wpgs",},data: {status: 0,format: "audio/L16;rate=16000",encoding: "raw",},};ws.send(JSON.stringify(WebApiSocketStore.params));try {// 解码 Base64 字符串为二进制数据const audioPcmData = Buffer.from(data.base64Pcm, 'base64');let offset = 0;while (offset < audioPcmData.length) {const subString = audioPcmData.slice(offset, offset + 1280)offset += 1280const isEnd = offset >= audioPcmData.length;const btoa = Buffer.from(subString, 'utf-8').toString('base64');const dataAudio = JSON.stringify({data: {status: isEnd ? 2 : 1,format: "audio/L16;rate=16000",encoding: "raw",audio: `${btoa}`, // 将二进制字符串转换为 Base64},})ws?.send(dataAudio);}} catch (error) {console.log('🚀 ~ Error reading file:', error);}
};
ws.onmessage = (e) => {// a message was receivedconsole.log("🚀 ~ e.data:", e.data)const jsonData = JSON.parse(e?.data || {});// 处理返回结果renderResult(e?.data || {});if (jsonData.code === 0 && jsonData.data.status === 2) {setVoiceText(resultText.current);ws.close();}if (jsonData.code !== 0) {ws.close();}
};ws.onerror = (e) => {// an error occurredconsole.log("🚀 ~ e.error", e.message)
};ws.onclose = (e) => {// connection closedconsole.log("🚀 ~ e.code:", e.code, e.reason)
};
3、处理语音返回结果
const resultText = React.useRef<string>('');
const resultTextTemp = React.useRef<string>('');
// 识别结束 处理返回结果
const renderResult = (resultData: string) => {let jsonData = JSON.parse(resultData);if (jsonData.data && jsonData.data.result) {let data = jsonData.data.result;let str = "";let { ws } = data;for (let i = 0; i < ws.length; i++) {str = str + ws[i].cw[0].w;}// 开启wpgs会有此字段(前提:在控制台开通动态修正功能)// 取值为 "apd"时表示该片结果是追加到前面的最终结果;取值为"rpl" 时表示替换前面的部分结果,替换范围为rg字段if (data.pgs) {if (data.pgs === "apd") {// 将resultTextTemp同步给resultTextresultText.current = resultTextTemp.current;}// 将结果存储在resultTextTemp中resultTextTemp.current = resultText.current + str;} else {resultText.current = resultText.current + str;}}
}
相关文章:
讯飞语音听写WebApi(流式)【React Native版】
假设已有 Base64 编码的音频文件(16kHz, s16le, pcm) 1、获取websocket url import * as CryptoJS from crypto-js;/*** 获取websocket url*/ const getWebSocketUrl () > {const config {// 请求地址hostUrl: "wss://iat-api.xfyun.cn/v2/iat",host: "i…...
【Linux编程】一个基于 C++ 的 TCP 客户端异步(epoll)框架(一))
TcpClient 类的设计与实现:一个基于 C 的 TCP 客户端框架 在现代网络编程中,TCP(传输控制协议)客户端是实现网络通信的基础组件之一。本文将详细介绍一个基于 C 的 TcpClient 类的设计与实现,该类提供了创建 TCP 连接…...
PG备份恢复--pg_dump
pg_dump pg_dump 是一个逻辑备份工具。使用 pg_dump 可以在数据库处于使用状态下进行一致 性的备份,它不会阻塞其他用户对数据库的访问 。 一致性备份是 pg_dump 开始运行时,给数据库打了一个快照,且在 pg_dump 运行过程 中发生的更新将不会被备份。 …...
pikachu靶场搭建详细步骤
一、靶场下载 点我去下载 二、靶场安装 需要的环境: mysqlApaches(直接使用小皮面板Phpstudy:https://www.xp.cn/),启动他们 设置网站,把靶场的路径对应过来 对应数据库的信息 由于没有核对数据库的信…...
HarmonyOS NEXT开发进阶(五):装饰器讲解
一、Provide Consume 父组件与子组件的子组件(官方叫法:后代组件)双向同步数据(即,父组件与后代组件可以相互操作 Provide 修饰的数据) 注意:Provide 与 Consume声明的变量名必须一致。 import {TestChild } from .…...
【编译原理】往年题汇总(山东大学软件学院用)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀编译原理_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...
【漏洞复现】F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026)
免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作…...
设计模式-创建型-单例模式
1. 单例模式简介 单例模式(Singleton Pattern)是一种常见的创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。在很多情况下,我们只希望某个类在整个应用程序中有一个唯一的实例,且该实例需要在…...
VBA技术资料MF243:利用第三方软件复制PDF数据到EXCEL
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
【2024最新】基于Python+Mysql+django的水果销售系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
一种寻路的应用
应用背景 利用长途车进行货物转运的寻路计算。例如从深圳到大连。可以走有很多条长途车的路线。需要根据需求计算出最合适路线。不同的路线的总里程数、总价、需要的时间不一样。客户根据需求进行选择。主要有一些细节: 全国的长途车车站的数据的更新: …...
编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法
在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法: yum install perl-Test-Simple...
一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景
文章目录 一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场景1. 防抖和节流的背景2. 节流3. 节流的应用场景4. 防抖5. 防抖应用场景 一文大白话讲清楚防抖和节流,设计封装防抖和节流,以及防抖和节流的应用场…...
Windows开启IIS后依然出现http error 503.the service is unavailable
问题背景 已启用IIS服务,配置步骤可以参考Windows10 IIS Web服务器安装配置 问题描述 在这一步浏览网站时,并没有出现默认首页,而是 http error 503 the service is unavailable 问题解决 参考 成功解决http error 503.the service is un…...
C++的封装(十四):《设计模式》这本书
很多C学习者学到对C语言有一定自信后,会去读一下《设计模式》这本书。希望能够提升自己的设计水平。 据我所知,围绕C语言出了很多书。因为正好赶上泡沫经济时代。大家一拥而上,自己半懂不懂就出书,抢着出书收割读者,出…...
牛客周赛73B:JAVA
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 \hspace{15pt}小红拿到了正整数 xxx ,她希望你找到一个长度为 kkk 的区间,满足区间内恰好有 nnn 个数是 xxx 的倍数。你能帮帮她吗? 输入描述: …...
【Ubuntu 20.4安装截图软件 flameshot 】
步骤一: 安装命令: sudo apt-get install flameshot 步骤二: 设置快捷方式: Ubuntu20.4 设置菜单,点击 号 步骤三: 输入软件名称, 软件快捷命令(flameshot gui)&am…...
剑指Offer|LCR 014. 字符串的排列
LCR 014. 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。 示例 1: 输入: s1 "ab" s2 "eidbaooo" 输出: True 解…...
【Agent】Chatbot、Copilot与Agent如何帮助我们的提升效率?
人工智能(AI)技术的迅猛发展正在深刻改变我们的生活和工作方式。你是否曾想过,未来的工作场景会是什么样子?AI的崛起不仅仅是科技的进步,更是我们生活方式的革命。今天,我们将深入探讨三种主要的AI能力&…...
QT笔记- QTreeView + QFileSystemModel 当前位置的保存与恢复 #选中 #保存当前索引
保存当前位置 QString currentPath model->filePath(view->currentIndex()); // 获得当前位置路径 恢复位置 view->setCurrentIndex(model->index(currentPath)); // 设置此路径所在位置为当前位置...
Pixel Language Portal保姆级教程:Hunyuan-MT-7B模型支持动态温度调节(per-language temperature)
Pixel Language Portal保姆级教程:Hunyuan-MT-7B模型支持动态温度调节(per-language temperature) 1. 认识你的像素翻译伙伴 Pixel Language Portal(像素语言跨维传送门)是一款基于腾讯Hunyuan-MT-7B大模型构建的创新…...
深夜调车的时候突然发现,Apollo的泊车轨迹优化藏着不少“骚操作“。咱们今天不聊虚的,直接扒开代码看三个核心模块怎么打架...哦不,怎么配合的
apollo 泊车轨迹优化代码 hybridastariaps平滑优化obca平滑优化 第一个图是matlab绘制 后面的图是程序用sdl库绘制先看Hybrid A*这个愣头青。这货生成的轨迹就像刚拿驾照的新手,能避开障碍物但轨迹拧巴得很。看看它扩展节点的代码片段: Node3D* expand(…...
一站式图像生成与编辑:Nano Banana 图像生成与编辑 API(包含多个示例和实用技巧)
在电商、时尚内容、网红营销或产品视觉设计领域,你是否曾面临以下挑战? 如何快速为同一肖像尝试多套服装?如何快速生成相同产品在不同场景/风格下的图像?如何将多个来源的材料合成一张“看起来真实”的图像? Ace Dat…...
VL53L1X_mbed驱动开发:嵌入式ToF测距实战指南
1. VL53L1X_mbed 库深度解析:面向嵌入式工程师的ToF激光测距驱动开发指南VL53L1X 是 STMicroelectronics 推出的第二代飞行时间(Time-of-Flight, ToF)激光测距传感器,采用 940nm 不可见红外 VCSEL 光源与单光子雪崩二极管…...
OpenClaw技能市场巡礼:Phi-3-mini-128k-instruct适配的十大实用工具
OpenClaw技能市场巡礼:Phi-3-mini-128k-instruct适配的十大实用工具 1. 为什么需要技能市场? 当我第一次接触OpenClaw时,最让我惊喜的不是它能够操控鼠标键盘的能力,而是它背后那个充满可能性的技能市场。作为一个长期与命令行打…...
OpenClaw+千问3.5-9B:自动化周报生成与数据分析
OpenClaw千问3.5-9B:自动化周报生成与数据分析 1. 为什么需要自动化周报 每周五下午三点,我的日历总会准时弹出提醒:"该写周报了"。这个重复了三年多的机械动作,消耗了我大量本该用于创造性工作的时间。直到上个月&am…...
企业财务自动化全场景落地,从入门到精通的完整指南 —— 2026企业级智能体选型与实战路径
在2026年的数字化深水区,企业财务管理正经历从“信息化”向“原生智能化”的跨代跃迁。 随着金税四期的全场景覆盖与数据要素资产化的推进,财务部门已不再满足于基础的流程自动化。 从“钱、票、账、税、资”的碎片化处理,到构建全链路闭环的…...
2026届学术党必备的降重复率平台推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 正在逐渐发生改变的是学术写作模式,借助的是人工智能论文工具,它的核…...
V821 DISP 显示驱动流程分析
文章目录1、前言2、环境介绍3、大致流程4、程序阅读5、总结1、前言 在全志 V821 下调试 RGB 屏幕时,因为一直创建不出 fb 节点,这里记录一下当时阅读显示驱动框架的过程。仅供参考。 2、环境介绍 sdk:V821 tina sdk v1.3 3、大致流程 初…...
别再死磕 SEO 了,2026 年是 GEO 的天下:如何让大模型在搜索结果里“翻你的牌子”?
1. 为什么 2026 年你的 SEO 流量断崖式下跌?如果你最近发现网站的 GA(Google Analytics)或百度统计里的自然流量在掉,别急着骂运营。看看现在的搜索习惯:用户不再去翻第二页的蓝色链接,而是直接在 Perplexi…...
