收藏
回答

innerAudioContext 真机无法正常播放?

1、模拟器内所有都正常

2、真机播放几乎秒结束

      // 创建音频实列
    createInnerAudioContext() {
      // 获取innerAudioContext实例
      innerAudioContext = wx.createInnerAudioContext();
      // 是否遵循系统静音开关,默认为 true。当此参数为 false 时,即使用户打开了静音开关,也能继续发出声音。从 2.3.0 版本开始此参数不生效
      innerAudioContext.obeyMuteSwitch = false;
      this.loadAudio();
      innerAudioContext.onPlay(() => {
        console.log('开始播放');
        this.getAudioDuration();
        this.setData({audioPlayStatus: 'start'});
      });
      // 监听音频自然播放至结束的事件
      innerAudioContext.onEnded(() => {
        console.log('自然播放至结束');
        this.setData({audioPlayStatus: 'stop', showCurrentTime: '00:00'});
      })
      // 监听音频停止事件
      innerAudioContext.onStop(() => {
        console.log('停止播放');
        this.setData({audioPlayStatus: 'stop', showCurrentTime: '00:00'});
      })
      // 监听音频播放错误事件
      innerAudioContext.onError((err) => {
        console.log('播放错误', err);
        this.setData({audioPlayStatus: 'stop', showCurrentTime: '00:00'});
        console.log('err', err);
        wx.showToast({
          title: `音频播放失败了!${err.errMsg.split(' ')[1]}`,
          icon: 'none'
        })
      })
    },
    // 开始/停止播放音频
    startOrStopPlayAudio () {
      const {audioPlayStatus} = this.data;
      if(audioPlayStatus === 'stop') {
        this.loadAudio();
        setTimeout(() => {
          innerAudioContext.play()
        }, 1000)
      } else {
        innerAudioContext.stop();
      }
    },
    // 加载音频
    loadAudio() {
      if(!innerAudioContext || !this.data.recorderFilePath) return;
      innerAudioContext.src = this.data.recorderFilePath;
    },
    // 获取音频时长以及播放进度
    getAudioDuration() {
      setTimeout(() => {
        innerAudioContext.duration;
        innerAudioContext.onTimeUpdate(() => {
          console.log(innerAudioContext.duration);
          console.log(innerAudioContext.currentTime);
          const audioDuration = Math.floor(innerAudioContext.duration); // 总时长(有延迟)
          const showCurrentTime = Math.floor(innerAudioContext.currentTime); // 当前播放进度
          this.setData({ showCurrentTime: this.getMinuteBySecond(showCurrentTime) })
          if (audioDuration !== 0 && audioDuration !== Infinity && !isNaN(audioDuration)) {
            this.setData({ showTotalTime: this.getMinuteBySecond(audioDuration) })
          }
        })
      }, 500)
    },



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

1 个回答

  • 一笑皆春
    一笑皆春
    05-13

    苹果手机这样吗?

    05-13
    有用
    回复 8
    • 小兵兵
      小兵兵
      05-13
      苹果13以及华为nova6都是这样,甚至苹果13直接连1秒都不到瞬间结束
      05-13
      回复
    • 一笑皆春
      一笑皆春
      05-13回复小兵兵
      试试 innerAudioContext.obeyMuteSwitch = true;
      05-13
      回复
    • 小兵兵
      小兵兵
      05-13回复一笑皆春
      不行
      05-13
      回复
    • 一笑皆春
      一笑皆春
      05-13回复小兵兵
      可以出个代码片段吧
      05-13
      回复
    • 小兵兵
      小兵兵
      05-13回复一笑皆春
      找到问题了,是因为通过RecorderManager在模拟器录音出来的问题是有问题的
      05-13
      1
      回复
    查看更多(3)
登录 后发表内容