Soundcloud Javascript SDK 2.0 - 流onfinish事件无法执行

时间:2015-06-23 18:08:48

标签: javascript soundcloud

我正在尝试将onfinish事件用于Soundcloud Javascript SDK Stream方法。我有以下代码正在工作,除了onfinish事件永远不会触发。任何想法都会非常有用。

var soundPlayer;
var smOptions = {
    useHTML5Audio: true,
    preferFlash: false,
    onfinish: function() {
        console.log('Finished playing');
    }
};

SC.initialize({
    client_id: "..."
});

SC.stream("/tracks/12345", smOptions, function(sound) {
    soundPlayer = sound;
});

提前致谢!

更新

由于onfinish不起作用,我在SC.stream()中返回的soundPlayer对象上使用了getState()方法。值得庆幸的是,当流完成时,有一个名为“已结束”的唯一状态。这就是我实施的内容:

setInterval(function() {
    if (soundPlayer != null && soundPlayer.getState() == "ended") {
        soundPlayer.play();
    }
}, 250);

我对此并不满意,但它给了我经验丰富的期望并满足要求。我真的希望有人可以帮助解释为什么记录的onfinish方法没有解雇。

有人有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这是一个使用回调而不是轮询的解决方法。它的工作原理是瞄准动态html5音频播放器元素本身&注册本机事件。我不希望它在后备模式下工作,但强制html5可能会完成解决方案,直到SDK v2返回声音对象。

var soundPlayer;
var smOptions = {
    useHTML5Audio: true,
    preferFlash: false
};

SC.initialize({
    client_id: "..."
});

SC.stream("/tracks/12345", smOptions, function(sound) {
    soundPlayer = sound;
    html5Audio = sound._player._html5Audio;
    html5Audio.addEventListener('ended', function(){ console.log('event fired: ended'); });
});

答案 1 :(得分:1)

这与SDK Version 3完美配合

SC.stream('/tracks/293', function(player) {
  player.on('finish', function() {
    stopPlayer();
  });
});

答案 2 :(得分:0)

我有同样的问题,我似乎无法获得任何回调。这是一个简单的例子,除了回调之外。 (这应该是一个评论而不是一个答案,但我没有这样做的声誉。)

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<h1>Sound Cloud API callback test</h1>
<script src="//connect.soundcloud.com/sdk-2.0.0.js"></script>
<script type="text/javascript">
    SC.initialize({
        client_id: "YOUR_CLIENT_ID"
    });

    SC.stream(
            '/tracks/293',
            {
                onload: function() { console.log("Does not fire."); },
                onplay: function() { console.log("Does not fire."); },
                onfinish: function() { console.log("Does not fire."); }
            },
            function(sound) { sound.play(); });
</script>
</body>
</html>