收藏
回答

createInnerAudioContext生成的实例在安卓环境下不能获取到音频的时长?

安卓微信版本 8.0.49

ios 机型测试没问题, 一到安卓就获取不到音频的时长,我加了循环获取也不行

getAudioInfo(url = '') {
  const obj = {
    src: url,
    duration: 0,
  }
  return new Promise((resolve, reject) => {
    const audioContext = wx.createInnerAudioContext()
    audioContext.src = url
    audioContext.onCanplay(() => {
      let jsTime = 5
      let intervalID = setInterval(function () {
        if (audioContext.duration !== 0 || jsTime === 0) {
          obj.duration = audioContext.duration;
          clearInterval(intervalID);
          resolve(obj);
          audioContext.destroy();
        }
        --jsTime
      }, 500);
    })
    audioContext.onError((err) => {
      console.log(`发生错误:`, err)
      this.$message.warning('无效的音频文件')
    })
  })
}

// 函数返回的数据音频信息 {"src": "wxfile://tmp_504b6a68382d12b167a8ff05b9e0fdc1a97b727dd109579f.m4a", "duration": 0}




回答关注问题邀请回答
收藏

1 个回答

  • No two
    No two
    03-18
      handleInitAudio(src: string) {
          const audioContext = wx.createInnerAudioContext();
          innerAudioContextRef.current = audioContext;
          audioContext.src = src
    
    
          //解决真机无法获取音频时长,被迫用这么**的写法
          audioContext.autoplay = false;
          const switchAudioPlay = setInterval(() => {
            audioContext.play();
            audioContext.pause();
          }, 100)
          audioContext.onPlay(() => {
            const getDuration = setInterval(() => {
              if (audioContext.duration > 0) {
                const durationStr = this.parseTime(audioContext.duration)
                this.setData({ durationStr, remainTimeStr: durationStr })
                clearInterval(getDuration);
                clearInterval(switchAudioPlay);
              }
            }, 100)
          })
         ...
      }
    
    03-18
    有用
    回复
登录 后发表内容