微信小程序通过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鼠标滑动评分控件完整实例
May 13 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
node.js 抓取代理ip实例代码
Apr 30 Javascript
Node.js 实现简单的接口服务器的实例代码
May 23 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
JavaScript中Array方法你该知道的正确打开方法
Sep 11 Javascript
js html实现计算器功能
Nov 13 Javascript
JS计算斐波拉切代码实例
Sep 12 Javascript
vue-router 按需加载 component: () => import() 报错的解决
Sep 22 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
2016/09/17 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python中time模块和datetime模块的用法示例
2016/02/28 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
python 列表降维的实例讲解
2018/06/28 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
Manuka Doctor英国官网:真正的麦卢卡蜂蜜和护肤品
2018/10/26 全球购物
网站编辑求职信
2013/10/17 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
林肯就职演讲稿
2014/05/19 职场文书
购房意向书
2014/08/30 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
详解Go与PHP的语法对比
2021/05/29 PHP