微信小程序通过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技巧
Dec 06 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
javascript 面向对象 function类
May 13 Javascript
jQuery中Dom的基本操作小结
Jan 23 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
在AngularJS框架中处理数据建模的方式解析
Mar 05 Javascript
用vue和node写的简易购物车实现
Apr 25 Javascript
深入理解ES7的async/await的用法
Sep 09 Javascript
vue2.0 常用的 UI 库实例讲解
Dec 12 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 Javascript
js 对象使用的小技巧实例分析
Nov 08 Javascript
Vue实现点击当前行变色
Dec 14 Vue.js
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中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php生成随机数的三种方法
2014/09/10 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
jQuery对下拉框,单选框,多选框的操作
2014/02/21 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python实现字典嵌套列表取值
2019/12/16 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
AOP的定义以及作用
2013/09/08 面试题
个人买房协议书范本
2014/10/06 职场文书
求职信格式范文
2015/03/19 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
工作建议书范文
2019/07/08 职场文书
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android