评论

录音stop失效?你需要一套歪操作😅

解决录音时间太短,录音没有被正确结束的问题

社区里有这么一个帖子:录音stop失效

帖子下的回复说的很有道理,启发了我的解决思路

录音是个异步的过程

录音的交互一般都是:按钮按下开始录音,按钮弹起停止录音。

但是如果按钮按下的持续时间太短,就会出现当调用RecorderManager.stop()的时候,录音的异步操作还没有返回结果。

这种情况下,stop()就(像是)不会被执行

我觉得这里小程序的处理是不妥的。起码应该将stop()操作缓存在任务队列里,再根据情况决定执不执行,或者进入onError回调

推理猜测说完了,说说解决,大致思路就是给个自己的标志位:

const manager = wx.getRecorderManager()
 
let isRecording = false
 
manager.onStart(() => {
  // isRecording为false
  // 说明handleTouchend()->manager.stop()先于开始录音
  // manager.stop()并没有被正确执行
  // 因此需要再调用一次
  if (!isRecording) {
    manager.stop()
  }
})
 
// ---- 业务代码 ----
function handleTouchstart () {
 isRecording = true
 manager.start() 
}
 
function handleTouchend () {
  manager.stop()
  isRecording = false
}
最后一次编辑于  2019-02-22  
点赞 0
收藏
评论
登录 后发表内容