weixin-js-sdk下的录音并转化为文字功能(VUE)

weixin-js-sdk下的录音并转化为文字功能(VUE)

1.引入weixin-js-sdk
import wx from 'weixin-js-sdk'

如果没有下载请

npm install weixin-js-sdk
2.methods中开始调用
const _this = wx
getWeiXin(){
//this.$http等价于axios,封装过
  this.$http({
    url: '后台给的接口里面有config的东西',
  }).then(res=>{
    wx.config({
      debug: true, // 开启调试模式,调试完成后改为false不然一直弹框哦!!!!
      appId: res.data.data.appid, // 必填,企业号的唯一标识,此处填写企业号corpid
      timestamp: res.data.data.timestamp, // 必填,生成签名的时间戳
      nonceStr: res.data.data.nonceStr, // 必填,生成签名的随机串
      signature: res.data.data.signature,// 必填,签名
      jsApiList: ['startRecord','stopRecord','onVoiceRecordEnd','translateVoice'] // 必填,需要使用的JS接口列表,
    })
    // config信息验证后才执行
    _this.ready(() => {
      //开始录音
      $('#talk').on('touchstart',function(e){
        e.preventDefault();
        //开始录音
        _this.startRecord();
      });
      //停止录音
      $('#talk').on('touchcancel touchend', function(){
        //停止录音接口
        _this.stopRecord({
          success: function (res) {
            this.localId = res.localId;
            _this.translateVoice({
              localId: this.localId, // 需要识别的音频的本地Id,由录音相关接口获得
              isShowProgressTips: 1, // 默认为1,显示进度提示
              success: function (res) {
                alert(res.translateResult);
               let result = res.translateResult;
                //去掉最后一个句号
                result = result.substring(0,result.length-1);
                alert(result);
                this.$router.push('/Intelligent?result='+result);
              }
            });
          }
        });
      });
      //监听录音自动停止接口
      _this.onVoiceRecordEnd({
        //录音时间超过一分钟没有停止的时候会执行 complete 回调
        complete: function (res) {
          this.localId = res.localId;
          $('#talk').removeClass('red');
          _this.translateVoice({
            localId: this.localId, // 需要识别的音频的本地Id,由录音相关接口获得
            isShowProgressTips: 1, // 默认为1,显示进度提示
            success: function (res) {
              alert(res.translateResult);
              result = res.translateResult;
              //去掉最后一个句号
              result = result.substring(0,result.length-1);
              this.$router.push('/Intelligent?result='+result);
            }
          });
        }
      });
    });
    //存入本地存储
    if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){
      _this.startRecord({
        success: function(){
          localStorage.rainAllowRecord = 'true';
          wx.stopRecord();
        },
        cancel: function () {
          alert('用户拒绝授权录音');
        }
      });
    }
    // 微信sdk错误返回问题
    _this.error((res) => {
      // alert('出错了:' + res.errMsg)// 这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
    })
  }).catch(err=>{
    // console.log(err);
  });
},
3.遇到的坑

微信内置的浏览器不支持在安卓上couchend,苹果可以,这就很鸡肋了,所以同时使用了touchcancel touchend

并且需要在touchstart时添加e.preventDefault();

页面进去后会一直弹出是否调用录音功能,解决办法是在第一次时存入本地存储。

至于为什么在VUE项目中使用jq呢是因为鸡肋啊,一开始不知道是坑,所以来回换。。。。
————————————————
版权声明:本文为CSDN博主「梦宝996」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40571755/article/details/102840085

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
其实作为H5想要做语音识别,自认为还说有各种弊端得,同时还是微信公众号里面,如果小程序得话,或许会简单一点,但是这里是在公众号里面开发,在这个过程中查阅个各种资料,其实里面得东西都大同小异,但是大多数并不全, 首先微信公众号里面得H5开发语音录入,试过各种方法,由于是java渣渣,页面技术只是了解简单得,因此在使用标签得时候,本身并不能适用于当前得需求,因此最后只能选择了微信自带得录音功能,使用微信提供的接口,(具体得接口使用还是去看微信接口得使用) 由于使用微信得接口得话,首先要上传到它得服务器上面去(虽然也有本地得文件储存id,但是好像并没有用),这里就涉及到了一个serverid,这个值是存在于微信临时素材库得id,后期要用它来获取录音得文件。 通过微信提供得获取临时素材文件得接口,得到了文件(具体方法网上一搜一大堆,后期我也会将完整得代码放进资源里面),但是这里有一个坑得问题,他的格式为.amr得格式,但是最后的目的是换为文字,因此这里涉及到了格式换 主要用了现成得技术,也是通过下载资源获取得jar以及实现得方法,将.amr换为了MP3格式 然后就就是最后一部了,将mp3得音频文件换为文字,我这里用的是讯飞得技术,当然百度得也可以, 其实整个需求得这个流程已经完成了,但是不得不说里面遇到得坑,由于是渣渣,除了人们总说的,换为mp3得时候会报N/A得错误,我还遇到了unkowFormat这个错误。 这里只是记录一下自己在查询资料时没有一个符合自己需求得资料,同时也希望以后有这样需求得人,可以将思路捋的更加清楚,也可以进行交流.
Vue3 + TypeScript项目中使用weixin-js-sdk,你需要执行以下步骤: 1. 安装weixin-js-sdk ``` npm install weixin-js-sdk ``` 2. 在组件中引入weixin-js-sdk ``` import wx from 'weixin-js-sdk'; ``` 3. 在组件mounted钩子函数中初始化JS-SDK ``` mounted() { this.initJSSDK(); } ``` 4. 编写初始化JS-SDK的方法 ``` async initJSSDK() { const res = await this.$http.get('/api/signature'); wx.config({ debug: false, appId: res.data.appId, timestamp: res.data.timestamp, nonceStr: res.data.nonceStr, signature: res.data.signature, jsApiList: ['chooseImage', 'uploadImage'] }); } ``` 上面的代码中,我们从后端获取了一个签名,然后使用wx.config方法进行JS-SDK的初始化。其中,debug表示是否开启调试模式,appId、timestamp、nonceStr、signature是签名相关的参数,jsApiList是需要使用的微信JS接口列表。 5. 在需要使用微信JS接口的地方调用相应的方法 ``` async chooseImage() { const res = await this.$http.get('/api/upload'); wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success (res) { const localIds = res.localIds; // 上传到服务器 wx.uploadImage({ localId: localIds[0], isShowProgressTips: 1, success: function (res) { const serverId = res.serverId; // 返回图片的服务器端ID // 将serverId发送到服务器进行保存等操作 } }); } }); } ``` 上面的代码中,我们在chooseImage的成功回调函数中,获取到了选择的图片的本地ID,然后使用wx.uploadImage方法将图片上传到服务器。在上传成功的回调函数中,我们可以获取到图片的serverId,然后将serverId发送到服务器进行保存等操作。 以上就是在Vue3 + TypeScript项目中使用weixin-js-sdk的步骤。需要注意的是,我们需要从后端获取签名等参数才能进行JS-SDK的初始化,因此需要与后端进行配合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值