InnerAudioContext.duration的正确获取姿势
发布于 5 年前 作者 qinchao 3317 次浏览 来自 分享
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的,原生思路类似.

有些音频会偶发,无法静音播放.

回到顶部