收藏
回答

createInnerAudioContext 获取到duration是0,这个怎么解决?

setTimeout了也是duration还是0,奇怪的是另外一个小程序同样的代码,同样的环境是可以获取到的


var src ='share/static/voice/openauto.wav'

var innerAudioContext = wx.createInnerAudioContext()

innerAudioContext.autoplay = true

innerAudioContext.src = src

console.log(innerAudioContext.duration);

innerAudioContext.onPlay(() => {

 console.log('onPlay:开始播放');

});

innerAudioContext.onError((res) => {

 console.log("onError:" + res.errMsg);

});

innerAudioContext.onCanplay(()=> {

  innerAudioContext.duration;

  setTimeout(() => {console.log(innerAudioContext.duration);}, 3000)

});

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

2 个回答

  • 浪花骑士
    浪花骑士
    2020-07-06

    试试这么写

    innerAudioContext.onCanplay(function get_duration() {
      if (innerAudioContext.duration) {
        // 做你想做的事情
          console.log(innerAudioContext.duration)
      } else {
        setTimeout(get_duration, 0)
      }
    })
    

    2020-07-06
    有用 2
    回复 2
    • |
      2021-07-27
      真机一样为0
      2021-07-27
      回复
    • 浪花骑士
      浪花骑士
      2021-07-28回复
      那就这么写
      const tempAudioContext = wx.createInnerAudioContext()
      tempAudioContext .src = 'xxxxxx'

      tempAudioContext.onPlay(function() {
        console.log(tempAudioContext.duration)
        tempAudioContext.stop()
      })

      tempAudioContext.volume = 0
      tempAudioContext.play()
      2021-07-28
      回复
  • bill
    bill
    2020-07-16

    实在不行,建议结合官方云服务,用node端第三方库计算音频的duration,我的音频因为本身就是在云函数里拿到的,所以直接用第三方nodejs库 music-metadata 算了一下再返回小程序端,这种计算还是服务端靠谱,客户端不同设备有各种坑

    2020-07-16
    有用
    回复
登录 后发表内容
问题标签