1、模拟器内所有都正常
2、真机播放几乎秒结束
// 创建音频实列
createInnerAudioContext() {
// 获取innerAudioContext实例
innerAudioContext = wx.createInnerAudioContext();
// 是否遵循系统静音开关,默认为 true。当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音。从 2.3.0 版本开始此参数不生效
innerAudioContext.obeyMuteSwitch = false;
this.loadAudio();
innerAudioContext.onPlay(() => {
console.log('开始播放');
this.getAudioDuration();
this.setData({audioPlayStatus: 'start'});
});
// 监听音频自然播放至结束的事件
innerAudioContext.onEnded(() => {
console.log('自然播放至结束');
this.setData({audioPlayStatus: 'stop', showCurrentTime: '00:00'});
})
// 监听音频停止事件
innerAudioContext.onStop(() => {
console.log('停止播放');
this.setData({audioPlayStatus: 'stop', showCurrentTime: '00:00'});
})
// 监听音频播放错误事件
innerAudioContext.onError((err) => {
console.log('播放错误', err);
this.setData({audioPlayStatus: 'stop', showCurrentTime: '00:00'});
console.log('err', err);
wx.showToast({
title: `音频播放失败了!${err.errMsg.split(' ')[1]}`,
icon: 'none'
})
})
},
// 开始/停止播放音频
startOrStopPlayAudio () {
const {audioPlayStatus} = this.data;
if(audioPlayStatus === 'stop') {
this.loadAudio();
setTimeout(() => {
innerAudioContext.play()
}, 1000)
} else {
innerAudioContext.stop();
}
},
// 加载音频
loadAudio() {
if(!innerAudioContext || !this.data.recorderFilePath) return;
innerAudioContext.src = this.data.recorderFilePath;
},
// 获取音频时长以及播放进度
getAudioDuration() {
setTimeout(() => {
innerAudioContext.duration;
innerAudioContext.onTimeUpdate(() => {
console.log(innerAudioContext.duration);
console.log(innerAudioContext.currentTime);
const audioDuration = Math.floor(innerAudioContext.duration); // 总时长(有延迟)
const showCurrentTime = Math.floor(innerAudioContext.currentTime); // 当前播放进度
this.setData({ showCurrentTime: this.getMinuteBySecond(showCurrentTime) })
if (audioDuration !== 0 && audioDuration !== Infinity && !isNaN(audioDuration)) {
this.setData({ showTotalTime: this.getMinuteBySecond(audioDuration) })
}
})
}, 500)
},
苹果手机这样吗?