微信小程序通过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 相关文章推荐
求解开jscript.encode代码的asp函数
Feb 28 Javascript
juqery 学习之三 选择器 层级 基本
Nov 25 Javascript
基于jquery的高性能td和input切换并可修改内容实现代码
Jan 09 Javascript
js中的push和join方法使用介绍
Oct 08 Javascript
详解JS函数重载
Dec 04 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
解决layui表格的表头不滚动的问题
Sep 04 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
Dec 06 Javascript
Preload基础使用方法详解
Feb 03 Javascript
javascript实现打砖块小游戏(附完整源码)
Sep 18 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汉字转换拼音的类
2013/06/18 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
javascript操作css属性
2013/12/30 Javascript
node.js中的console.time方法使用说明
2014/12/09 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
Python中的yield浅析
2014/06/16 Python
python避免死锁方法实例分析
2015/06/04 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
详解Python3定时器任务代码
2019/09/23 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
药剂学专业应届生自荐信
2013/09/29 职场文书
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
高一家长会邀请函
2014/01/12 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
主题班会开场白
2015/06/01 职场文书
小学远程教育工作总结
2015/08/13 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书