一種實現無縫循環播放音樂方案


場景:

為了節省頁面資源,往往需要將一段小音頻循環播放,通常做法是在audio標簽上添加loop屬性,但不幸的是,該屬性並不能保證無縫循環(gapless looping)播放,明顯的感覺到中間的停頓。

解決方案:

使用audio標簽的Web API提供的方法和屬性進行循環播放,具體如下

事件名稱 事件作用
timeupdate 當前播放的時長發生改變時觸發
   
 

屬性名稱 屬性作用
currentTime                 用來獲取或控制當前播放的時間,單位為s
duration 獲取媒體文件的總時長,以s為單位,如果無法獲取,返回NaN

主要監聽timeupdate事件,然后比較播放時間屬性currentTime和音頻的時長屬性duration,在快要結束的時候,將currentTime屬性重新設置為0,代碼如下:
// 使用web audio API
var audio_file = new Audio('./videos/bg.mp3');
audio_file.play();
audio_file.addEventListener('timeupdate', function(){
    var buffer = 1.2;
    if(this.currentTime > this.duration - buffer){
        this.currentTime = 0;
        this.play();
    }}, false);
 
使用要求:
(1)音樂盡量是「淡入淡出」型,重音盡量不要在開頭或結束位置,否則,即使能將音樂循環播放,也會感覺不銜接;
(2)API接口只能用於webkit內核,比較新的瀏覽器 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM