微信小程序通过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+mapbar实现地图定位
Apr 09 Javascript
javaScript checkbox 全选/反选及批量删除
Apr 28 Javascript
javascript跨浏览器的属性判断方法
Mar 16 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
Sep 06 Javascript
PHP PDO操作总结
Nov 17 Javascript
Angular设置title信息解决SEO方面存在问题
Aug 19 Javascript
总结AngularJS开发者最常犯的十个错误
Aug 31 Javascript
javascript 判断当前浏览器版本并判断ie版本
Feb 17 Javascript
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
了解javascript中的Dom操作
May 27 Javascript
浅谈vue项目用到的mock数据接口的两种方式
Oct 09 Javascript
React配置子路由的实现
Jun 03 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
Zend Guard一些常见问题解答
2008/09/11 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
php常用正则函数实例小结
2016/12/29 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
jquery cookie插件代码类
2009/05/26 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
uni-app实现点赞评论功能
2019/11/25 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python写的Socks5协议代理服务器
2014/08/06 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
社会实践先进工作者事迹材料
2014/05/06 职场文书
国庆宣传标语
2014/06/30 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
2015年党建工作总结
2015/03/30 职场文书
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python