微信小程序通过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 相关文章推荐
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
利用jquery制作滚动到指定位置触发动画
Mar 26 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
原生js实现放大镜
Feb 20 Javascript
JavaScript两个变量交换值的实现方法
Mar 01 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
详解使用WebPack搭建React开发环境
Aug 06 Javascript
layui table数据修改的回显方法
Sep 04 Javascript
在layui中layer弹出层点击事件无效的解决方法
Sep 05 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
Feb 02 Javascript
详解JavaScript 异步编程
Jul 13 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
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
php中如何执行linux命令详解
2018/11/06 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
JQuery在循环中绑定事件的问题详解
2016/06/02 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
vue使用vant中的checkbox实现全选功能
2020/11/17 Vue.js
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
Python中方法链的使用方法
2016/02/23 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
python绘制彩虹图
2019/12/16 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python 如何调用远程接口
2020/09/11 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
写一个方法1000的阶乘
2012/11/21 面试题
Java语言程序设计测试题选择题部分
2014/04/03 面试题
高级Java程序员面试要点
2013/08/02 面试题
会计系个人求职信范文分享
2013/12/20 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
安全施工标语
2014/06/07 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python