收藏
回答

如何获取到音频文件是时长,duration获得是0

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.createInnerAudioContext() 工具 6.0.4 2.7.1

this.innerAudioContext.src = data.sound;

let duration = this.innerAudioContext.duration;

console.log(duration)





输出来的是0

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

6 个回答

  • 明
    2019-08-23

    还是不兼容各种手机,安卓的 就获取不到 时长

    2019-08-23
    有用 4
    回复
  • 本味
    本味
    2019-11-21

    需要先写这个函数:innerAudioContext.onPlay(function callback),再调用InnerAudioContext.onTimeUpdate(function callback),然后在这个函数中获取音频时长即可。我试了,这个方法可以

    2019-11-21
    有用 3
    回复 5
    • 天天
      天天
      2020-05-26
      果然可以,大兄弟!
      2020-05-26
      回复
    • 圆
      2020-06-05
      果然可以,大兄弟
      2020-06-05
      回复
    • 岁岁平安
      岁岁平安
      2021-03-18
      我现在是必须要再加个定时器,在微信开发者工具中才可以拿到长度。而且定时器log的内容必须和onTimeUpdate里的保持一致才行
      2021-03-18
      回复
    • shmily
      shmily
      2021-04-27回复岁岁平安
      有没有不加定时器的解决方案
      2021-04-27
      回复
    • BILYHO
      BILYHO
      2021-04-30回复shmily
      未来时间 - 当前时间咯
      2021-04-30
      回复
  • 初拥
    初拥
    2021-01-14

    很多时候需求都是在不播放音频的情况下获取音频时长的,请问现在微信官方有解决这块的api吗?官方可否回复一下

    2021-01-14
    有用 2
    回复 2
    • 小朋友JK
      小朋友JK
      2021-11-12
      请问这个问题解决了吗
      2021-11-12
      回复
    • zy
      zy
      2021-12-29回复小朋友JK
      请问有后续了吗
      2021-12-29
      回复
  • 元创科技
    元创科技
    2020-03-02

    很多时候需求都是在不播放音频的情况下获取音频时长的,这个微信的api暂时好像没办法做到

    2020-03-02
    有用 2
    回复
  • 邹家兴
    邹家兴
    2022-03-25

    我是这样的 :  getDuration(){

    that.innerAudioContext.play();

          that.innerAudioContext.onPlay(()=>{

            that.innerAudioContext.onTimeUpdate(()=>{

    that.duration = 0

              let duration2 = that.innerAudioContext.duration || that.duration

               if (duration2 && duration2 != duration) {

                 that.duration = duration2

                 console.log(that.duration)

    that.innerAudioContext.stop();

               }

            })

          })

        },

    因为onTimeUpdate事件会实时促发只要判断that.innerAudioContext.duration是否有值就行,优化可以加 if (duration2 && duration2 != that.duration) {}防止性能消耗

    2022-03-25
    有用
    回复
  • 是小白啊
    是小白啊
    2019-06-10

    麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-06-10
    有用
    回复 3
    • 小样
      小样
      2019-06-10

      官方示例,自己试一下


      const innerAudioContext = wx.createInnerAudioContext()

      innerAudioContext.autoplay = true

      innerAudioContext.src = 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E061FF02C31F716658E5C81F5594D561F2E88B854E81CAAB7806D5E4F103E55D33C16F3FAC506D1AB172DE8600B37E43FAD&fromtag=46'

      console.log(innerAudioContext.duration)

      innerAudioContext.onPlay(() => {

       console.log('开始播放')

      })

      innerAudioContext.onError((res) => {

       console.log(res.errMsg)

       console.log(res.errCode)

      })


      2019-06-10
      回复
    • KeieT
      KeieT
      2019-06-11

      我也遇到这个问题,我在canPlay事件的时候打印duration也是0

      2019-06-11
      回复
    • cc
      cc
      2019-06-19

      setTimeout 可以拿到

      2019-06-19
      1
      回复
登录 后发表内容