我正在制作一个音乐播放器,通过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));
},
});
});
为了证明歌曲在一起播放,我用一个显示当前播放歌曲秒数的元素进行了搜索。当两首歌曲同时播放时,搜索栏加载的值和时间值会一直闪烁以显示两首歌曲的值。只是为了显示重叠。
当时有想法播放一首歌,并停止正在播放的任何歌曲吗?
答案 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();
}
答案 1 :(得分:2)
API不会(并且不应该)固有地进行一次一次性的检查,即使它对他们的网站来说是非常不可或缺的。拥有持久变量is_playing
或其他东西并不难,但如果您打开了多个播放器标签,则会遇到问题。
这是一个用例还是您的播放器是一个单页的应用程序?