声音管理器2和播放列表自动播放下一首歌曲不起作用

时间:2013-03-29 13:30:51

标签: playlist soundmanager2

我有一个文字JS对象,可以创建和播放我的播放列表。 在HTML页面中,我有一个包含所有曲目的列表。 当我点击某些曲目时,一切正常,但当我在一首曲目中单击并等待曲目结束时,下一首曲目不会播放。 这是我的代码的一部分:

   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(function(){DG_PLAYER.playSound(nextSong);},2000)它工作正常。 有人可以帮助我吗?

另外一件事,当第一首歌曲结束并调用播放下一首歌曲时,未加载曲目(没有来自onload事件的消息)。 谢谢,抱歉我的英语不好。 甲

好的, 我尝试在设置上添加“flashVersion:9”,这解决了问题但是在IE 8上我现在有了动作脚本消息。

1 个答案:

答案 0 :(得分:1)

From SoundManager2's Revision History

  

Adob​​e于2013年2月26日发布的Flash Player 11.6.602.171引入了SM2默认的Flash 8(flashVersion:8)基于API的JS / Flash交互的问题,其中SM2方法从回调中调用,如{{ 1}}不起作用。这主要打破了用于按顺序播放声音,连续加载一系列声音等的方法。 (有关详情,请参阅discussion。)

     

请注意,这不会影响使用onfinish()的情况;但是,SM2默认使用soundManager.setup({ flashVersion: 9})

     

具体来说,Flash启动的事件(例如声音整理)会使Flash - > JS调用SM2 API,后者调用用户指定的事件处理程序。如果用户指定的SM2 flashVersion: 8处理程序立即调用像play()这样生成JS的SM2方法 - > Flash调用,此调用无声地失败或被阻止。如果其SWF是针对Flash 8 API构建的,那么使用类似回调模式的其他JS + Flash库也可能会受到影响。

     

怀疑时间或递归/堆栈问题,发现onfinish()引入用户指定的SM2回调,如setTimeout(callback, 0)恢复顺序/播放列表功能。

     

Flash Player 11.6.602.180,由Adobe于2013年3月12日发布,表现出相同的行为。为了避免额外的攻击,SM2将此应用于所有基于Flash 8的API回调,无论安装的是什么版本的Flash Player。由于这种变化,预计不会出现回归。

     

或者,使用onfinish()可以避免此问题,因为基于Flash 9的API似乎没有此问题。