我正在尝试将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方法没有解雇。
有人有什么想法吗?
答案 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>