InnerAudioContext.duration的正确获取姿势
this.audioContext = wx.createInnerAudioContext() // 创建context
this.audioContext.onCanplay(() => { // 可以播放后,直接播放
this.audioContext.volume = 0 // 无音播放
this.audioContext.play() // 播一下,才能获取到长度,获取到总长度后暂停
})
this.audioContext.onTimeUpdate(() => {
if (this.audioDuration === '00:00') { // 获取播放长度
setTimeout(() => { // 真机暂停太快,不生效
this.audioContext.pause() // 获取到总长度后暂停
this.audioContext.stop() // 重置播放进度
})
this.audioDuration = this.getAudioDuration() // 获取总长度
} else {
this.audioContext.volume = 1 // 正常播放,因为onCanplay会重复触发,每次进度发生改变都需要恢复声音大小,也可以在oncanplay中移除oncanplay事件
this.audioCurrentTime = this.getAudioCurrentTime() // 获取当前进度
}
})
getAudioDuration 和 getAudioCurrentTime 获取到时间后,
做了一个 65 => ‘01:05’ 的转换
getAudioDuration () {
if (!this.audioContext) {
return '00:00'
}
const duration = this.audioContext.duration
this.audioDurationSecond = duration
return this.secondFormat(duration)
},
代码是kbone的,原生思路类似.
有些音频会偶发,无法静音播放.