基础前端框架:react-native
语音交互服务:华为云

1、react-native-audio录制音频

华为云支持的音频编码格式如下表:
一共有六种,但是一般用下表的前两种,即不压缩的裸音频格式

audio_format取值 说明
pcm16k16bit 16k16bit单通道录音数据。
pcm8k16bit 8k16bit单通道录音数据。
 audioPath = AudioUtils.DownloadsDirectoryPath + '/luyin.aac'; //路径下的文件名AudioRecorder.prepareRecordingAtPath(audioPath, {SampleRate: 16000,            //采样率Channels: 1,                  //通道AudioQuality: "High",         //音质(Low, Medium, High)AudioEncoding: "aac",         //音频编码(aac编码iOS和Android均支持)AudioEncodingBitRate: 256000,  //音频编码比特率IncludeBase64: true,          //是否是base64格式});

最后发现react-native-audio录出来的音频编码不符合,需要在服务端再转一次音频编码。

2、react-native-fs分片读取录音文件转为base64

计算方式:
16000采样率: 1s音频 16000采样点
16bits: 一个采样点 16bits = 2 bytes
1s : = 1000ms
即 100ms * 16000 * 2bytes / 1000ms = 3200bytes

ITEM_SIZE = 3200;
RNFS.read(audioPath, ITEM_SIZE, ITEM_SIZE*itemIndex, "base64")
.then()
.catch()

3、base64转化为二进制数据

function base64ToUint8Array(base64String) {const padding = '='.repeat((4 - base64String.length % 4) % 4);const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');const rawData = window.atob(base64);const outputArray = new Uint8Array(rawData.length);for (let i = 0; i < rawData.length; ++i) {outputArray[i] = rawData.charCodeAt(i);}return outputArray;
}

4、 使用websocket与服务端交互

举例:华为云-实时语音转写连续模式-websocket握手

交互流程:

握手成功——发出开始指令——传输二进制数据——接收文本数据——…——发出结束指令——握手结束

实时语音识别api WebSocket协议:
0.0s: 【连接】发起WebSocket请求
0.1s: 【连接】连接建立
0.1s: 【发送开始参数帧】发送鉴权及识别参数
0.1s-0.2s: 【本地】录制100ms的录音
0.2s: 【发送音频数据帧】发送上面100ms的录音数据到服务器
0.2s-0.3s: 【本地】录制100ms的录音
0.3s: 【发送音频数据帧】发送上面100ms的录音数据到服务器

1.2s-1.3s: 【本地】录制100ms的录音
1.3s: 【发送音频数据帧】发送上面100ms的录音数据到服务器
1.31s:【接收结果】收到0s-1s这段语音的一句话临时识别结果

4.2-4.3s: 【本地】录制100ms的录音
4.3s: 【发送音频数据帧】发送上面100ms的录音数据到服务器
4.39s:【接收结果】收到0s-4.1s这段语音的一句话最终识别结果

9.9s-10.0s: 【本地】录制100ms的录音
10.0s: 【发送音频数据帧】发送上面100ms的录音数据到服务器
10.0s: 【发送结束帧】 告知服务端音频结束
10.3s:【接收结果】收到7.1-10.0 这段语音的一句话最终识别结果

5、websocket发送二进制数据

websocket.binaryType = 'arraybuffer';
webSocket.send(arrayBuffer);

使用react-native-audio进行华为云语音交互服务(实时语音转写)大致流程相关推荐

  1. 安防视频上云的趋势、痛点及华为云视频接入服务探索及实践

    随着视频资源与内容在互联网所占比重不断提升,相应的在视频资源利用水平以及不断提高的业务和产品需求之间的矛盾也会愈加突出.本文来自华为云视频接入服务产品经理齐彦昆在线上分享中的演讲,结合在视频接入服务的 ...

  2. 【线上分享】安防视频上云趋势、痛点,华为云视频接入服务探索及实践

    近年来,视频安防行业一直处于高速发展阶段,据预测,2021全国在视频安防领域新增摄像头数量在1.2亿台,已经全面进入大视频时代,视频资源在我国的安全.治理.交通.警务.城管.环保等领域发挥着越来越重要 ...

  3. 【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

    一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解React Native与iOS之间的通信交互. 本篇主要分为两部分讲解:(关于其中讲解的OC语法等不介绍,不懂的请自行 ...

  4. 云图说|华为云数据复制服务 打造不一样的用户权限迁移

    业界主流的云数据库迁移方案中,无法完全继承源数据库的权限体系. 要同时迁移几套数据库,账号繁多,密码又由不同人维护,来回沟通,费时费力效率低. 华为云数据复制服务DRS推出业内首家用户权限迁移功能,一 ...

  5. 阿里云智能语音交互服务导览

    阿里云智能语音交互 产品介绍 & 接口文档 阿里云iDST的智能语音交互服务主要有以下几个大类: 语音识别服务ASR :将语音转换成文字的能力快速集成,打造出"能听"的应用 ...

  6. 华为云人脸识别服务 FRS 之初体验

    华为云人脸识别服务 FRS 之初体验 程序之美 前言 操作流程 所遇问题 结束语 程序之美 前言 人脸识别服务(Face Recognition Service,简称FRS),是基于人的脸部特征信息, ...

  7. 华为云对象存储服务OBS教你一招轻松解决存储难题

    身处于信息爆炸的时代,各种各样的数据琳琅满目,需要记录存储的资料和信息数不胜数,有时候个人都会感觉到存储空间不足,更何况是一些正处于发展阶段中小型企业?那对于存储的需求就更迫切了. 遇见这种问题,很多 ...

  8. 华为云容器镜像服务 SWR 加速镜像的拉取和推送

    文章目录 简介 使用华为云 SWR 步骤 获取长期有效登录指令 构建 docker 镜像并推送到华为云 案例: Oracle JDK 11.0.13 Image 附录 简介 华为云容器镜像服务(Sof ...

  9. 还在为网速烦恼?你可能没有使用华为云CDN加速服务

    如今的社会人们的生活节奏越来越快,相对应的对生活中网络速度的需求正在不断提高.不得不说,在当下这个时代,互联网对人们的生活有着高度融合,这也导致人们在生活中对网络提速的要求越来越严格.如浏览访问的加载 ...

最新文章

  1. AttributeError: ‘Tensor‘ object has no attribute ‘encoder‘
  2. [Node.js] 2、利用node-git-server快速搭建git服务器
  3. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf
  4. python 多进程共享变量manager_python 进程间共享数据 multiprocessing 通信问题 — Manager...
  5. 机房批量改计算机名计算机组,批量设置IP地址和计算机名
  6. Linux 下面的时区与时间错误修复过程记载(血泪篇)
  7. Spring boot Tomcat配置
  8. 【教程】win7下无需软件或adhoc补丁通过无线网卡搭建虚拟wifi网络
  9. 08-R包那么多,怎么才能快速找到自己需要的包呢?
  10. LINUX的bash的一些特性
  11. ASP.NET读取自定义的config文件
  12. ionic cordova 热更新
  13. Adobe Acrobat Pro 2017安装
  14. [IOS APP] 适用于iso9001质量管理体系认证
  15. iphone用计算机显示器,如何将iPhone屏幕投射到电脑上
  16. 程序员做自媒体,龙叔教你怎么快速成为优秀博主【CSDN篇】
  17. Execution failed for task ':app:processDebugResources'. No slave process to process jobs, aborting
  18. oracle 12c 死锁 处理,oracle - PLSQL Oracle 12c死锁,为什么需要对SSX Table锁进行独立删除? - 堆栈内存溢出...
  19. springboot结合注解动态获取数据库表
  20. HP暗影精灵7笔记本OMEN16.1inch Gaming Laptop PC16-b0000原装出厂Win11系统恢复原厂OEM系统

热门文章

  1. 实现 JSON + Jquery+.Net ajax功能
  2. office便捷办公03:Excel的vlookup和hlookup函数使用总结
  3. Heartbeat 安装教程
  4. 微信小程序标题栏非首页时home图标显示与隐藏(So easy!)
  5. 记录一道题目附件是咒语.txt的杂项题writeup
  6. 安卓手机卡顿怎么解决_安卓手机卡顿的问题,终于解决了
  7. Jquery 获取当前时间日期
  8. 微信上的python训练营_用 Python 爬了爬自己的微信朋友(实例讲解)
  9. 笔记本N卡掉显驱问题个人记录
  10. 华为交换机删除配置命令access_华为配置命令交换机密码清除