通过基础库1.6.0以后提供的wx.getRecordManager接口返回的recordManager对象进行录音。
当用户手机熄屏或者通过分享切到其他页面(非当前小程序)时,
1、如果我们在页面的onHide里调用了recordManager的pause或stop方法,微信会立即报错,operateRecorder:fail:access denied。后面只要不重启小程序,即使再次通过wx.getRecordManager获取recordManager对象调用其start方法,也会立即报错,无法录音。
2、如果在页面的onHide里不去调stop方法,不会报错,回来后继续录音。但是等到最后调用stop时,在onStop里返回的录音文件发现,第一次onHide后录的所有内容,都没有保存。
我们现在真的有点纠结,是继续用微信新的wx.getRecordManager还是回去用来老的wx.startRecord与wx.stopRecord呢?
请尽快给个答复吧。
报错截图如下
你好,请提供一下出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。
机型方面,至少目前小米6是必现的,微信版本我的是6.6.7,上面已经写了。
代码很简单:
// 录音参数
const RECORD_OPTIONS = {
duration: 600000,
// 最多10分钟
sampleRate: 16000,
numberOfChannels: 1,
encodeBitRate: 32000,
format:
'mp3'
,
};
onLoad:
function
(options) {
const recorderManager = wx.getRecorderManager();
recorderManager.onStart((res) => {
console.debug(
'recorder start'
);
});
recorderManager.onPause((res) => {
console.debug(
'recorder paused'
);
});
recorderManager.onStop((res) => {
console.debug(
'recorder stop'
,
this
.customData.currentTimeValue, res.duration, res.fileSize);
const {
tempFilePath,
fileSize,
duration
} = res;
// 另外,这里的duration,如果在pause一段时间后再stop,则时长是错的,会把暂停的那段时间也加进去
});
recorderManager.onError((e) => {
console.error(
'录音失败'
, e);
});
this
.customData.recorder = recorderManager;
}
beginRecord:
function
() {
if
(!
this
.data.recording) {
this
.setData({
recording:
true
,
paused:
false
,
currentTime: 0,
// 重置开始时间
});
console.debug(
'开始录音'
);
this
.customData.recorder.start(RECORD_OPTIONS);
}
},
onHide:
function
() {
this
.customData.recorder.pause();
}
另外,上面忘提了,onStop里传过来的duration,在暂停录音后一段时间调结束的话,会把暂停那段时间算上,但是音频文件解析后,其时长是不包括那段的。
例如:录音1分钟,暂停30秒,调stop,onStop里的duration是1分30秒,但是实际音频文件只有1分钟。如果在暂停后,调resume继续录制,直接调stop结束,则时长是对的。
代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)是这样子的,按照文档指引创建吧
最新进展:
在切后台时(包括分享、熄屏等),recordManager会回调onPause,故不在onHide中进行操作,直接根据回调切换界面状态。
但是后台调用pause/stop后报错无法再次录音的问题,请微信的同学尽快给个答复吧。
同样的问题。。。只要失败了就跪了
现在只能以不在后台调pause或stop的方式来规避了,其余情况下的报错,就没招了
我用了旧的start和stop,本来这也是用另一个api有bug,迫不得已用录音。。。结果还有问题,哎
大佬,联系方式有没,私聊下