【问题标题】:Sound Manager 2 and playlist automatically play next song doesn't works声音管理器 2 和播放列表自动播放下一首歌曲不起作用
【发布时间】:2013-03-29 13:30:50
【问题描述】:

我有一个文字 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 事件没有返回消息)。 谢谢,对不起我的英语不好。 A.

好的, 我尝试在设置中添加“flashVersion: 9”,这可以解决问题,但在 IE 8 上我现在有 un action script 消息。

【问题讨论】:

    标签: playlist soundmanager2


    【解决方案1】:

    From SoundManager2's Revision History:

    Adobe 于 2013 年 2 月 26 日发布的 Flash Player 11.6.602.171 引入了 SM2 的默认 Flash 8 (flashVersion: 8) 基于 API 的 JS/Flash 交互的问题,其中 SM2 方法从回调中调用,例如 @987654323 @ 行不通。这主要破坏了用于顺序播放声音、串行加载一系列声音等的方法。 (更多信息请参见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())可恢复顺序/播放列表功能。

    Adobe 于 2013 年 3 月 12 日发布的 Flash Player 11.6.602.180 表现出相同的行为。为避免额外的黑客攻击,SM2 将此应用于所有基于 Flash 8 的 API 回调,无论安装的是什么版本的 Flash Player。预计此更改不会导致任何回归。

    或者,这个问题可以通过使用soundManager.setup({ flashVersion: 9 }) 来避免,因为基于 Flash 9 的 API 似乎没有这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多