小程序
小游戏
企业微信
微信支付
扫描小程序码分享
InnerAudioContext.seek在跳转到指定位置后 currentTime没更新
8 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
我也遇到了同样的问题,当音频正在播放的时候seek会导致之后的onUpdateTime没法回调。但我seek之前先pause一下,然后seek,最后onSeeked里面再play之后就没有这个问题(不能确定没问题,但目前我这边是跑的没问题的,大家可以试试)。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
2024年了 这个问题还在
页面有两条语音要播放,切换src后seek()无效,音频还是会从开头播放,这是什么问题造成的?
2023年7月3日遇到seek不管用,还是从头播放,或者说官方没给具体的示例代码,我们用的不对?感觉大概率不是用的不对,因为seek放在各种位置都试过了
我这个是也是,当seek改变播放位置的时候,在currentTime里面能够拿到更新的位置数值,但是他不是立马更新,有一个延迟,,
然后我就修改成下面代码,第一个是记录滑块滑动中的数值,此时关闭定时器,让定时器检索到播放器的试试数值不在更新到滑块中,,,然后当我滑块滑动完成之后才打开定时器从新更新音频当前播放位置到滑块中,,,修改之后测试发现,currentTime的延迟更新没有了,即为实时更新滑块中的数值,,,,
但是改bug的时候,改完,再回来用这个seek和currentTime的时候,发现问题又复现了,,,
bindchanging(event){ // console.log(event) clearInterval(__this.data.timerID) this.data.sliderData.value= event.detail.value this.setData({ sliderData:this.data.sliderData }) player.seek(event.detail.value) }, bindchange(event){ __this = this // player.seek(event.detail.value) console.log(event.detail.value) //下面是实时获取当前播放器的时长,并更新到进度条的当前值的对象中 this.sliderTime(); /* sliderTime(){ //下面是实时获取当前播放器的时长,并更新到进度条的当前值的对象中 __this.data.timerID=setInterval(function() { __this.data.sliderData.value= player.currentTime; __this.setData({ sliderData:__this.data.sliderData }) console.log(__this.data.sliderData.value) }, 100); }, */ },
tapRead: function (e) { console.log("跳转播放"); let timeStart = Math.floor(e.currentTarget.dataset.timestart * 1000) / 1000 let timeEnd = Math.floor(e.currentTarget.dataset.timeend * 1000) / 1000 console.log(`${typeof(timeStart)}${timeStart} to ${typeof(timeEnd)}${timeEnd}`); _InnerAudioContext.seek(timeStart) _InnerAudioContext.play() this.setData({ timeStart, timeEnd }); },
这里需要注意的是:.seek(num) 中num是数值类型,精确到小数点后 3 位。
如果你直接用传过来的参数,是字符型就会出错。
我也遇到了同样的问题,ios和android都是
麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
// 拖动slide时 slider 滑块回跳动 就是因为在滑动后 InnerAudioContext.seek在跳转到指定位置后 而 currentTime没更新 导致监听更新滑块位置会出现 跳动
// this.myAudio.src = 'http://mp3.9ku.com/mp3/3/2943.mp3'
// 视频资源可能失效 请更换后再试
console.log(currentTime, 'currentTime')
this.myAudio.seek(currentTime)
console.log(this.myAudio.currentTime, 'this.myAudio.currentTime')
// 拖动slider时 currentTime变化了 但this.myAudio.currentTime 还是旧的, 在播放时 onTimeUpdate里面的 更新滑块位置由于this.myAudio.currentTime 还是旧的 滑块位置会从 滑动后位置跳到-->未滑动之前的位置-->再跳到滑动后位置
// 进度条变化
this.myAudio.onTimeUpdate(() => {
// 更新滑块位置
this.myAudioPos = this.myAudio.currentTime / this.myAudio.duration * 100
// 更新当前已播放时间
this.myAudioCurrent = this.format(this.myAudio.currentTime)
})
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
我也遇到了同样的问题,当音频正在播放的时候seek会导致之后的onUpdateTime没法回调。但我seek之前先pause一下,然后seek,最后onSeeked里面再play之后就没有这个问题(不能确定没问题,但目前我这边是跑的没问题的,大家可以试试)。
2024年了 这个问题还在
页面有两条语音要播放,切换src后seek()无效,音频还是会从开头播放,这是什么问题造成的?
2023年7月3日遇到seek不管用,还是从头播放,或者说官方没给具体的示例代码,我们用的不对?感觉大概率不是用的不对,因为seek放在各种位置都试过了
我这个是也是,当seek改变播放位置的时候,在currentTime里面能够拿到更新的位置数值,但是他不是立马更新,有一个延迟,,
然后我就修改成下面代码,第一个是记录滑块滑动中的数值,此时关闭定时器,让定时器检索到播放器的试试数值不在更新到滑块中,,,然后当我滑块滑动完成之后才打开定时器从新更新音频当前播放位置到滑块中,,,修改之后测试发现,currentTime的延迟更新没有了,即为实时更新滑块中的数值,,,,
但是改bug的时候,改完,再回来用这个seek和currentTime的时候,发现问题又复现了,,,
bindchanging(event){ // console.log(event) clearInterval(__this.data.timerID) this.data.sliderData.value= event.detail.value this.setData({ sliderData:this.data.sliderData }) player.seek(event.detail.value) }, bindchange(event){ __this = this // player.seek(event.detail.value) console.log(event.detail.value) //下面是实时获取当前播放器的时长,并更新到进度条的当前值的对象中 this.sliderTime(); /* sliderTime(){ //下面是实时获取当前播放器的时长,并更新到进度条的当前值的对象中 __this.data.timerID=setInterval(function() { __this.data.sliderData.value= player.currentTime; __this.setData({ sliderData:__this.data.sliderData }) console.log(__this.data.sliderData.value) }, 100); }, */ },
tapRead: function (e) { console.log("跳转播放"); let timeStart = Math.floor(e.currentTarget.dataset.timestart * 1000) / 1000 let timeEnd = Math.floor(e.currentTarget.dataset.timeend * 1000) / 1000 console.log(`${typeof(timeStart)}${timeStart} to ${typeof(timeEnd)}${timeEnd}`); _InnerAudioContext.seek(timeStart) _InnerAudioContext.play() this.setData({ timeStart, timeEnd }); },
这里需要注意的是:.seek(num) 中num是数值类型,精确到小数点后 3 位。
如果你直接用传过来的参数,是字符型就会出错。
我也遇到了同样的问题,ios和android都是
麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
// 拖动slide时 slider 滑块回跳动 就是因为在滑动后 InnerAudioContext.seek在跳转到指定位置后 而 currentTime没更新 导致监听更新滑块位置会出现 跳动
// this.myAudio.src = 'http://mp3.9ku.com/mp3/3/2943.mp3'
// 视频资源可能失效 请更换后再试
console.log(currentTime, 'currentTime')
this.myAudio.seek(currentTime)
console.log(this.myAudio.currentTime, 'this.myAudio.currentTime')
// 拖动slider时 currentTime变化了 但this.myAudio.currentTime 还是旧的, 在播放时 onTimeUpdate里面的 更新滑块位置由于this.myAudio.currentTime 还是旧的 滑块位置会从 滑动后位置跳到-->未滑动之前的位置-->再跳到滑动后位置
// 进度条变化
this.myAudio.onTimeUpdate(() => {
// 更新滑块位置
this.myAudioPos = this.myAudio.currentTime / this.myAudio.duration * 100
// 更新当前已播放时间
this.myAudioCurrent = this.format(this.myAudio.currentTime)
})