收藏
回答

innerAudioContext.onCanplay() 如何获取音频总时长?

innerAudioContext.onCanplay() 方法获取到的 duration 值为“只读”格式,请问怎么能取到 duration 值?

src 已经获取到。

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

3 个回答

  • Mr.Zhao
    Mr.Zhao
    2023-02-14

    播放中获取时长 大概就这么写,未播放前获取时长走服务端吧。你问的问题 要先自己搜索,百度或者社区内就能查到解决办法

    2023-02-14
    有用 1
    回复 2
    • Qiu (吉²)
      Qiu (吉²)
      2023-02-14
      谢谢🙏
      2023-02-14
      回复
    • Y
      Y
      2023-11-03
      不播放是不是就获取不到,我就是想获取音频的时长,不让音频播放,我使用onTimeUpdate后一直在获取,我就想获取一次
      2023-11-03
      回复
  • 微盟
    微盟
    2023-02-14

    需要调用两次方法获取 , 基本第二次就可以正常获取到值 ; 具体可以设置一个计时器 , 获取到值的时候我们再把计时器清除掉; 在InnerAudioContext .onCanplay()方法中进行操作获取;

    /* 小程序特有相关 */
      myaudio = wx.createInnerAudioContext();
      myaudio.src = dataset.resource_path || dataset.path; //视频地址
      myaudio.onCanplay(function getDuration() {
          let intervalID = setInterval(function() {
            if (myaudio.duration !== 0) {
              console.log(myaudio.duration,'测试')
              clearInterval(intervalID);
            }
          }, 500);
        })
    
    2023-02-14
    有用 1
    回复 1
    • Qiu (吉²)
      Qiu (吉²)
      2023-02-14
      谢谢🙏
      2023-02-14
      回复
  • Jack.Chanel
    Jack.Chanel
    01-13
    // 预播放,每隔50ms获取一次音频时长
    audioCtx.onCanplay(async () => {
        this.playAudio();
        let duration = 0;
        await new Promise((resolve) => {
          const timer = setInterval(() => {
            if (Math.floor(audioCtx.duration) !== 0) {
                clearInterval(timer);
                resolve(1);
              }}, 50);
        });
        this.pauseAudio();
        duration = Math.floor(audioCtx.duration);
        this.audioStatus.duration = Math.max(1, duration);
        this.audioStatus.loaded = true;
    });
    

    目前的方案是这样比较合理

    https://www.jackchanel.top/

    01-13
    有用
    回复
登录 后发表内容