处理微信同声传译插件30011问题:please wait recognition finished

一、遇到的问题

出现30011报错后,无法继续录音 ,
调用manager.stop()仍无法录音
在这里插入图片描述

二、原因

  • manager.start(),短时间内调用了两次,
    第一次的stop()没有生效,仍然是录音状态,第二次 start() 就报错
  • 导致现象:30011,提示录音尚未结束
  • 失效时长:并不是一直不可用,最长60秒,恢复可用状态
    根据start方法中设置的duration
    在这里插入图片描述
    在这里插入图片描述

三、解决方式

1.思路

确保0.5秒内,不触发第二次manager.start()

2.步骤
  • 1.通过setTimeout, 点击语音按钮后,延迟0.5s调用manager.start()
  • 2.等到0.5s之后,setTimout开始执行,判断手指是否已离开按钮,若已离开,不再调用manager.start();

注:设置一个全局变量,记录手指是否离开按钮

3.代码(封装好的js,可直接使用)
const plugin = requirePlugin('WechatSI');
//获取全局唯一的语音识别管理器recordRecoManager
const manager = plugin.getRecordRecognitionManager();

var recordState=false; //录音状态
var content="";
var yuyinCallback = null;

initRecord();
function initRecord() {
  manager.onRecognize = function (res) {
    console.log("成功开始识别", res)
  }
  manager.onStart = function (res) {
    console.log("成功开始录音", res)
  }
  manager.onError = function (res) {
    console.error("error msg", res)
  }
  manager.onStop = function (res) {
    let text = res.result;
    console.log('结束录音,语音内容: ' + text);

    //--mock start--
    // text = '向上'
    //--mock end---

    if (!text || text.lenth == 0) {
      wx.showModal({
        title: '提示',
        content: '听不清楚,请重新说一遍!',
        showCancel: false,
        success: function (res) { }
      })
      return;
    }

    content = text.replace("。","");
    console.log("松开按钮到获取语音文本时间:"+(new Date().getTime()- endTime))
    if (yuyinCallback){
      yuyinCallback(content);
    }else{
      yuyinCallback = null;
    }
  }
}

function getRecordAuth() {
  // 获取用户是否授权录音
  wx.getSetting({
    success: (res) => {
      // 如果未授权提示用户,当前功能需要录音功能才能使用
      if (!res.authSetting['scope.record']) {
        wx.authorize({
          scope: 'scope.record',
          success() {
            console.log("用户允许录音")
          },
          fail(res) {
            wx.showModal({
              title: '授权提示',
              content: '该应用需要使用你的录音权限,是否同意?',
              success: function (res) {
                if (res.confirm) {
                  console.log('用户同意使用录音权限')
                  // 当用户第一次授权拒绝时,根据最新的微信获取权限规则,不会再次弹框提示授权,需要用户主动再设置授权页面打开授权,需要做对应的文案提示
                  wx.openSetting()
                } else if (res.cancel) {
                  console.log('用户不同意使用录音权限');
                }
              }
            })
          }
        })
      } else {
        console.log("已有录音权限")
      }
    }
  })
}

var startTime = 0;
var endTime = 0;
var startOver = true;
var endEnable = true;
function onMikeStart(e) {
  if (!startOver){
	endEnable = false;
    return;
  }else{
    startOver = false;
    endEnable = true;
  }

  startTime = new Date().getTime();
  console.log("点击开始:" + startTime)

  recordState=true;

  setTimeout(function(){
    if (!recordState){
      console.log("时间小于0.5秒,认为误点,不进行录音");
      startOver = true;
      return;
    }

    console.log("开始录音,调用manager.start()")
    manager.start({
      duration:30000,
      lang: 'zh_CN',// 识别的语言,目前支持zh_CN en_US zh_HK sichuanhua
    });

    console.log("开始录音,调用manager.start完成")
    startOver = true;
  },500)
}

function onMikeEnd(callback) {
  if(!endEnable){
	  return;
  }
	
  recordState=false
  
  endTime = new Date().getTime();
  console.log("点击结束:" + endTime)

  let time = endTime - startTime;
  console.log("按钮时间:"+time);

  if(time < 500){
    console.log("时间太短,不调用调用manager.stop()")
    return;
  }

  // 语音结束识别
  console.log("调用manager.stop()结束录音")
  manager.stop();
  console.log("调用manager.stop()结束录音完成")
  
  yuyinCallback = callback;
}

module.exports = {
  onMikeStart: onMikeStart,
  onMikeEnd: onMikeEnd,
  getRecordAuth: getRecordAuth
}

四、总结

  • 1.查看源代码,没有暴露可强制停止的方法
  • 2.copy源码,想本地运行,但其中的服务接口不让调用,扑街
  • 3.其实可以不用这个插件,只使用微信本身的录音功能,把音频文件传到服务端解析,服务端集成科大讯飞的接口(但这样成本更大,也不知道是不是免费的)
  • 4.如果上面的代码有bug,希望道友回复
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在使用uni-app开发微信小程序时,与直接使用微信网页开发工具开发微信小程序有一些差别。由于uni-app可以开发多平台,因此不同平台的开发需要在指定的位置进行相应的配置才能生效。对于引入微信同声传译小程序,有两种方式可以实现。一种是整个小程序可使用,即小程序中的所有分包都可以使用该功能。另一种是指定对应的分包可使用该功能。在使用插件之前,需要在manifest.json文件的mp-weixin内声明使用的插件,并进行相应的配置。具体的配置可以参考所使用插件的开发文档。在代码中,可以直接使用文档中提供的代码来实现微信同声传译的功能。通过引入插件并调用相应的方法,可以实现文本转语音的功能。例如,可以使用plugin.textToSpeech方法来实现将指定的文本转换为语音的功能。在方法的参数中,可以指定语言、是否启用语音合成等。成功调用该方法后,可以在回调函数中获取到生成的语音文件的信息。 #### 引用[.reference_title] - *1* *2* *3* [uni-app微信小程序开发,引入微信同声传译插件](https://blog.csdn.net/qq_32837111/article/details/106804236)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值