微信小程序通过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 相关文章推荐
解决FLASH需要点击激活的代码
Dec 20 Javascript
javascript中的缓动效果实现程序
Dec 29 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
Jun 24 Javascript
原生js ActiveXObject获取execl里面的值
Nov 01 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
Jun 17 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
Jul 13 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
VuePress 中如何增加用户登录功能
Nov 29 Javascript
JS数组方法slice()用法实例分析
Jan 18 Javascript
vue使用canvas实现移动端手写签名
Sep 22 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实现网上点歌(二)
2006/10/09 PHP
php print EOF实现方法
2009/05/21 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
jQuery select控制插件
2009/08/17 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
vue中tab选项卡的实现思路
2018/11/25 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
python基础之入门必看操作
2017/07/26 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
python 基于wx实现音乐播放
2020/11/24 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
2014年情人节活动方案
2014/02/16 职场文书
行政助理的岗位职责
2014/02/18 职场文书
家长通知书教师评语
2014/04/17 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
表扬稿范文
2015/01/17 职场文书