缓冲区的大小是以毫秒(Millisecond)为单位的。设置更大的缓冲区,能够让 web audio API 更好的去理解和处理你的音乐文件,从而使得音乐播放更加平滑顺畅。另外,设置较小的缓冲区可以加快音乐文件的加载速度,但是会导致声音变得不够流畅。
为了获得最佳的播放效果,JSaudio缓冲区大小一般被设置为200ms到500ms之间。此外,这个缓冲区大小也要根据你要播放的文件大小和类型来进行调整。
HTML5中的audio对象有个属性为 ended,改属性是返回音频是否播放结束,是boolean类型的。例如我自己写的一个判断:this.audioPlay=function(soundPath,callback){$("#shapeAudio").attr("src",soundPath)var shapeAudio=document.getElementById("shapeAudio")shapeAudio.play()/*判断声音是否播放完成,播放完成之后执行回调函数*/if(callback != undefined){var is_playFinish = setInterval(function(){if(shapeAudio.ended){callback()window.clearInterval(is_playFinish)}}, 10)}}改判断为当声音播放完成之后再执行回调函数callback使用audio的buffered属性,该属性返回表示音频已缓冲部分的 TimeRanges 对象。
这里假定_audio为所获取的audio标签,实现代码如下:
// 获取已缓冲部分的 TimeRanges 对象var timeRanges = _audio.buffered
// 获取以缓存的时间
var timeBuffered = timeRages.end(timeRages.length - 1)
// 获取缓存进度,值为0到1
var bufferPercent = timeBuffered / _audio.duration
// ......
// 之后将bufferPercent按照自己需要的方式进行处理即可
// 处理的时候要注意浮点数精度造成的误差。