评论

innerAudioContext获取音频时长duration

innerAudioContext兼容获取音频时长duration

//首先创建一个innerAudioContext对象
let innerAudioContext = uni.createInnerAudioContext({
	useWebAudioImplement: true
})
innerAudioContext.src = encodeURI(this.audio)
innerAudioContext.autoplay = true //设置自动播放
innerAudioContext.volume = 0  //设置播放音量为0
innerAudioContext.startTime = 0
innerAudioContext.play();  //手动播放音频
const getDuration = () => {
	setTimeout(() => {
		if (innerAudioContext.duration === 0) {
			getDuration();
		} else {
			// 获取到正确的duration
			this.duration = innerAudioContext.duration;
                        //手动停止播放,并且销毁innerAudioContext对象
			innerAudioContext.stop();
			innerAudioContext.src = "";
			innerAudioContext.autoplay = false;
			innerAudioContext.destroy();
		}
	}, 100);
}
innerAudioContext.onPlay(getDuration);  //音频播放的时候调用获取音频长度的函数,onCanPlay有时候获取不到duration

//之后再创建新的innerAudioContext对象,正常播放音频


最后一次编辑于  2024-07-25  
点赞 0
收藏
评论

3 个评论

  • C
    C
    07-22

    为onPlay和onCanPlay都添加监听事件,在yes那一行就能正确获取duration值了,也不会影响播放效果。

    function onCanPlay() {
    	console.log("oncanplay: ", audioContext.duration);
    	audioContext.play();
    }
    
    
    function onPlay() {
    	console.log("onplay: ", audioContext.duration);
    	const duration = audioContext.duration;
    	if (duration) {
    		console.log("yes", audioContext.duration)
    		totalTime.value = duration;
    	} else {
    		console.log("no", audioContext.duration)
    		audioContext.stop();
    		audioContext.play();
    	}
    	
    }
    
    
    audioContext.onCanplay(onCanPlay);
    audioContext.onPlay(onPlay);
    


    07-22
    赞同
    回复
  • 一咻
    一咻
    2024-12-18

    真离谱

    2024-12-18
    赞同
    回复
  • 一咻
    一咻
    2024-07-30

    找到问题了吗?是不是微信的bug?

    2024-07-30
    赞同
    回复 2
    • ???
      ???
      2024-07-30
      是微信的bug没办法只能这么取
      2024-07-30
      回复
    • ㅤ
      04-07
      不行就是 获取不了  我直接后端获取传递了
      04-07
      回复
登录 后发表内容