使用HTML5 SoundCloud播放器小部件,您如何以编程方式跳到不同的轨道而不会导致第二个不需要的音轨播放?

时间:2013-04-14 22:15:22

标签: soundcloud

我正在使用HTML5 Soundcloud小部件API跳到声音完成事件的另一首歌曲。

http://jsbin.com/axuzoj/4/edit

不幸的是,在完成事件中似乎存在竞争条件错误。 Soundcloud播放器最终同时播放两首歌曲:列表中的下一首歌曲和完成事件处理程序中跳过的歌曲。

var widget = null;
$(function() {
    var iframe = document.querySelector('#soundcloud_player iframe');
    widget = SC.Widget(iframe);        
    widget.bind(SC.Widget.Events.READY, function() {
        widget.bind(SC.Widget.Events.FINISH, function() {                
            widget.skip(3);
        });
    });
});

这是一个已知的错误吗?

声音结束后是否有更好的方法可以跳到不同的音轨?

有没有办法关闭连续播放?

在完成事件处理程序中跳过之前添加一个短暂的等待,可以解决问题。但这似乎不是一个好方法。

window.setTimeout(function() { widget.skip(3); }, 300);

另一种解决方法是使用PLAY_PROGRESS事件而不是FINISH事件跳到上一首歌结束前的歌曲。

widget.bind(SC.Widget.Events.READY, function() {
    widget.bind(SC.Widget.Events.PLAY_PROGRESS, function(obj) {
        if (obj.relativePosition > 0.999) {
            widget.pause();
            widget.skip(3);
        }
    });
});

1 个答案:

答案 0 :(得分:2)

是的,现在已经修复了竞争条件错误。