2013-03-29 24 views
1

我有一個文字JS對象,創建並播放我的播放列表。 在HTML頁面中,我有一個包含所有曲目的列表。 當我點擊某個曲目時,所有曲目都可以正常播放,但是當我點擊一首曲目並等待曲目結束時,下一首曲目將無法播放。 這是我的代碼的一部分:聲音管理器2和播放列表自動播放下一首歌不起作用

playSound : function(track){ 
     console.log("Play this song"); 



     DG_PLAYER.TrackPlaying = track; 

     soundManager.destroySound('MySoundID'); 



       DG_PLAYER.Sound = soundManager.createSound({ 
             id:'MySoundID', 
             url:track.sound, 
             autoLoad: true, 
             autoPlay: true, 
             onload: function() { console.log('sound loaded!', this); }, 
             onfinish: function(){ 
              console.log('end song'); 
            var nextSong = DG_PLAYER.getNextSong(); 
              DG_PLAYER.playSound(nextSong); 
             }, 
             onfailure : function(){console.log('some error')}, 
             whileloading : function(){console.log('i m loading');}, 
             whileplaying : function(){console.log('i m playing');} 
            }); 


    }, 

如果我改變onfinish事件的一行: 的setTimeout(函數(){DG_PLAYER.playSound(nextSong);},2000),它工作正常。 有人可以幫助我嗎?

另一件事情是,當第一首歌曲結束併爲下一首歌曲播放音樂時,音軌未加載(onload事件沒有消息返回)。 謝謝,對不起我的英文不好。 答:

好的, 我嘗試在安裝程序中添加「flashVersion:9」,並解決了此問題,但在IE 8上我現在有無法執行的腳本消息。

回答

1

From SoundManager2's Revision History

Flash播放器11.6.602.171,由Adobe於2013年2月26日發佈,推出了一個問題與SM2的默認的Flash 8(flashVersion:8)基於API的JS/Flash互動,其中從回調中調用的SM2方法(如onfinish())將不起作用。這主要是打破了依次播放聲音的方法,連續加載一系列聲音等等。 (有關更多信息,請參見discussion。)

請注意,這不會影響正在使用soundManager.setup({ flashVersion: 9})的情況;但是,SM2默認使用flashVersion: 8。具體來說,Flash啓動的事件(例如聲音整理)使Flash-> JS調用SM2 API,後者調用用戶指定的事件處理程序。如果用戶指定的SM2 onfinish()處理程序立即調用類似play()的SM2方法來進行JS - > Flash調用,則此調用會以靜默方式失敗或被阻止。其他使用類似回調模式的JS + Flash庫也可能受到影響,前提是其SWF是針對Flash 8 API構建的。

懷疑時序或遞歸/堆棧問題,發現將setTimeout(callback, 0)引入用戶指定的SM2回調(如onfinish())可恢復順序/播放列表功能。

Adob​​e在3/12/2013發佈的Flash Player 11.6.602.180顯示了相同的行爲。爲了避免額外的黑客入侵,SM2將此應用於所有基於Flash 8的API回調,而不管安裝了哪種Flash Player版本。由於這種變化,預計沒有迴歸。

或者,通過使用soundManager.setup({ flashVersion: 9 })可避免此問題,因爲基於Flash 9的API似乎沒有此問題。

+1

謝謝! 現在都很清楚。 –