如何通过SoundCloud API在当时只播放一首歌曲

时间:2014-07-06 19:12:02

标签: jquery soundcloud soundmanager2

我正在制作一个音乐播放器,通过SoundCloud API和SoundManager 2.有一个歌曲列表,当每个歌曲点击时,它开始播放。但问题是,如果一首歌正在播放,而我选择了另一首歌,旧的歌曲不会停止,它会继续播放。所以这两首歌同时播放。即使按下相同的歌曲,如果时间相同,也会导致同一首歌播放几次。如何停止上一首歌并播放当前的歌曲?

DEMO http://jsfiddle.net/danials/anU2h/

通过SoundCloud流式传输歌曲的代码:

SC.stream("/tracks/" + id, function (sound) {
    sound.play({
        whileplaying: function () {
            $(".seekLoad").css('width', ((sound.position / sound.duration) * 100) + '%');
            $(".secPlayed").text(converter(sound.position));
        },
    });
});

为了证明歌曲在一起播放,我用一个显示当前播放歌曲秒数的元素进行了搜索。当两首歌曲同时播放时,搜索栏加载的值和时间值会一直闪烁以显示两首歌曲的值。只是为了显示重叠。

当时有想法播放一首歌,并停止正在播放的任何歌曲吗?

2 个答案:

答案 0 :(得分:3)

SoundCloud API使用soundManager进行音频流传输(如您所知)。由于您没有添加Sound Manager 2,因此SoundCloud API会在第一个流中为您添加它。来自SoundCloud API Docs

  

SDK的流式传输由soundManager2库提供支持。如果soundManager2已经存在,它将由SDK加载。

Sound Manager 2有一个stopAll方法可以满足你的需要。您只需将其添加到playIt函数的开头即可。这将检查soundManager是否存在。如果是这样,它将尝试停止播放所有音频。如果它没有,那么我们可以假设还没有播放。

if(typeof(soundManager) !== 'undefined'){
    soundManager.stopAll();
}

DEMO

答案 1 :(得分:2)

API不会(并且不应该)固有地进行一次一次性的检查,即使它对他们的网站来说是非常不可或缺的。拥有持久变量is_playing或其他东西并不难,但如果您打开了多个播放器标签,则会遇到问题。

这是一个用例还是您的播放器是一个单页的应用程序?