微信小程序通过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 相关文章推荐
XML的代替者----JSON
Jul 21 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
Dec 04 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
javascript中Array数组的迭代方法实例分析
Feb 04 Javascript
百度地图自定义控件分享
Mar 04 Javascript
JavaScript中数组去除重复的三种方法
Apr 22 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
Aug 07 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
JS基础之逻辑结构与循环操作示例
Jan 19 Javascript
JavaScript canvas绘制折线图
Feb 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/03/24 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
php微信开发之图片回复功能
2018/06/14 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
python自动翻译实现方法
2016/05/28 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python爬虫文件下载图文教程
2018/12/23 Python
Python调用C语言的实现
2019/07/26 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
Shell编程面试题
2016/05/29 面试题
大学新闻系应届生求职信
2014/06/02 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
工作收入住址证明
2014/10/28 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
新闻通讯稿模板
2015/07/22 职场文书
初三数学教学反思
2016/02/17 职场文书
React四级菜单的实现
2022/04/08 Javascript