微信小程序通过websocket实时语音识别的实现代码


Posted in Javascript onAugust 19, 2020

之前在研究百度的实时语音识别,并应用到了微信小程序中,写篇文章分享一下。

先看看完成的效果吧

微信小程序通过websocket实时语音识别的实现代码

前置条件

申请百度实时语音识别key 百度AI接入指南

创建小程序

设置小程序录音参数

在index.js中输入

const recorderManager = wx.getRecorderManager()
 const recorderConfig = { 
  duration: 600000, 
  frameSize: 5, //指定当录音大小达到5KB时触发onFrameRecorded
  format: 'PCM', 
  //文档中没写这个参数也可以触发onFrameRecorded的回调,不过楼主亲测可以使用
  sampleRate: 16000, 
  encodeBitRate: 96000, 
  numberOfChannels: 1 
 }

使用websocket连接

linkSocket() {
  let _this = this
  //这里的sn是百度实时语音用于排查日志,这里我图方便就用时间戳了
  let sn = new Date().getTime()
  wx.showLoading({
   title: '识别中...'
  })
  recorderManager.start(recorderConfig)
  //开启链接
  wx.connectSocket({
   url: 'wss://vop.baidu.com/realtime_asr?sn=' + sn,
   protocols: ['websocket'],
   success() {
    console.log('连接成功')
    _this.initEventHandle()
   }
  })
 },

 //监听websocket返回的数据
 initEventHandle() {
  let _this = this
  wx.onSocketMessage((res) => {
   let result = JSON.parse(res.data.replace('\n',''))
   if(result.type == 'MID_TEXT'){
    _this.tran(result.result, 'value')
    _this.setData({
     textDis: 'none',
     value: result.result,
    })
   }
   if(result.type == 'FIN_TEXT'){
    let value = _this.data.text
    let tranStr = value + result.result
    _this.tran(tranStr, 'text')
    _this.setData({
     value: '',
     valueEn: '',
     textDis: 'block',
     text: tranStr,
    })
   }
  })
  wx.onSocketOpen(() => 
   //发送数据帧
   _this.wsStart()
   console.log('WebSocket连接打开')
  })
  wx.onSocketError(function (res) {
   console.log('WebSocket连接打开失败')
  })
  wx.onSocketClose(function (res) {
   console.log('WebSocket 已关闭!')
  })
 },

发送开始、音频数据、结束帧

wsStart() {
  let config = {
   type: "START",
   data: {
    appid: XXXXXXXXX,//百度实时语音识别appid
    appkey: "XXXXXXXXXXXXXXXXXX",//百度实时语音识别key
    dev_pid: 15372,
    cuid: "cuid-1",
    format: "pcm",
    sample: 16000
   }
  }
  wx.sendSocketMessage({
   data:JSON.stringify(config),
   success(res){
    console.log('发送开始帧成功')
   }
  })
 },

 wsSend(data){
  wx.sendSocketMessage({
   data:data,
   success(res){
    console.log('发送数据帧成功')
   }
  })
 },

 wsStop(){
  let _this = this
  this.setData({
   click: true,
  })
  _this.stop()
  let config = {
   type: "FINISH"
  }
  wx.hideLoading()
  recorderManager.stop()
  wx.sendSocketMessage({
   data:JSON.stringify(config),
   success(res){
    console.log('发送结束帧成功')
   }
  })
 },

小程序录音回调

onShow: function () {
  let _this = this
  recorderManager.onFrameRecorded(function (res){
   let data = res.frameBuffer
   _this.wsSend(data)
  })

  recorderManager.onInterruptionBegin(function (res){
   console.log('录音中断')
   _this.wsStopForAcc()
  })

  recorderManager.onStop(function (res){
   console.log('录音停止')
  })
 },

到此这篇关于微信小程序通过websocket实时语音识别的实现代码的文章就介绍到这了,更多相关微信小程序websocket实时语音识别内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
javascript显示隐藏层比较不错的方法分析
Sep 30 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
基于jquery可配置循环左右滚动例子
Sep 09 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
IE6兼容透明背景图片及解决方案
Aug 19 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
Dec 08 Javascript
jquery实现图片平滑滚动详解
Mar 22 jQuery
vue使用rem实现 移动端屏幕适配
Sep 26 Javascript
vue 获取url参数、get参数返回数组的操作
Nov 12 Javascript
JS实现炫酷雪花飘落效果
Aug 19 #Javascript
javascript实现雪花飘落效果
Aug 19 #Javascript
js实现直播点击飘心效果
Aug 19 #Javascript
js实现鼠标点击飘爱心效果
Aug 19 #Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 #Javascript
Vue实现导航栏菜单
Aug 19 #Javascript
vue实现tab栏点击高亮效果
Aug 19 #Javascript
You might like
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
JS重要知识点小结
2011/11/06 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
JS获取动态添加元素的方法详解
2019/07/31 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
python和pyqt实现360的CLable控件
2014/02/21 Python
跟老齐学Python之关于类的初步认识
2014/10/11 Python
python从sqlite读取并显示数据的方法
2015/05/08 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
24式加速你的Python(小结)
2019/06/13 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
老公爱的承诺书
2014/03/31 职场文书
代理协议书范本
2014/04/22 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
Python函数中的不定长参数相关知识总结
2021/06/24 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript