微信小程序通过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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
JavaScript 创建对象和构造类实现代码
Jul 30 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
Oct 25 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
Apr 26 Javascript
JS组件Bootstrap Table使用实例分享
May 30 Javascript
最全面的JS倒计时代码
Sep 17 Javascript
jQuery和JavaScript节点插入元素的方法对比
Nov 18 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
js轮播图之旋转木马效果
Oct 13 Javascript
JavaScript Blob对象原理及用法详解
Oct 14 Javascript
详解Java中String JSONObject JSONArray List转换
Nov 13 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 和 MySQL 基础教程(四)
2006/10/09 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php 操作调试的方法
2012/07/12 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python3设计模式之简单工厂模式
2017/10/17 Python
python实现redis三种cas事务操作
2017/12/19 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
详解Python打包分发工具setuptools
2019/08/05 Python
python3 map函数和filter函数详解
2019/08/26 Python
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
计算机本科生自荐信
2013/10/15 职场文书
技校教师求职简历的自我评价
2013/10/20 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
演讲开场白和结束语
2015/05/29 职场文书
初中班主任教育随笔
2015/08/15 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书
python解决12306登录验证码的实现
2021/04/18 Python