// 录音完成猴预览播放
// duration的取值是播放对象的duration ,当InnerAudioContext2.src替换后,InnerAudioContext2.duration 不会变还是如图的8秒,实际录音是2秒
const InnerAudioContext2 = wx.createInnerAudioContext();
const recordManger = wx.getRecorderManager();
recordManger.onStop((res) => {
this.tempRecordFilePath = res.tempFilePath;
this.audioDuration = Math.round(res.duration);
InnerAudioContext2.src = res.tempFilePath;
this.recordDuration = parseInt(RECORD_DURATION - this.remainingTime);
});
this.send({
type: 'VOICE_MSG',
content: JSON.stringify({
content: res.resourceName,
duration: Math.floor(
InnerAudioContext2.duration || this.audioDuration / 1000
)
})
});
以上代码片段实现的是:
1、录音完成后,预览播放并设置录音的duration
2、发送时优先读播放器的duration,如果没有值则读取录音对象的duration(录音对象duration一直有问题,多次pause的录音,duration不会听一直累加,所以用了播放器的duration)
3、这边执行完后打日志发现(忘记截图) 该灰度基础库2.31.0版本,大概率出现 InnerAudioContext.src修改后,InnerAudioContext.duration不会变的情况。影响目前我们的语音播放和进度条。
期望处理方案
A、官方修复该问题:InnerAudioContext.src修改后,InnerAudioContext及时刷新,InnerAudioContext.duration返回新src路径文件的duration。
B、27日之后再全量2.31.0,我们26日发布回退代码,用回以前recordManger返回的duration。
2.31.0预计啥时候灰度,会修复该问题吗?@官方
切换src后,duration不会马上变,因为加载新的src需要时间,可以用 InnerAudioContext.onCanplay 来监听加载好事件,加载好之后可以读 duration