【问题标题】:How to play only one song at the time by SoundCloud API如何通过 SoundCloud API 一次只播放一首歌曲
【发布时间】:2014-07-07 03:26:05
【问题描述】:

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

演示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));
        },
    });
});

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

有什么想法在当时播放一首歌曲,然后停止正在播放的歌曲吗?

【问题讨论】:

    标签: jquery soundcloud soundmanager2


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

      API 不会(也不应该)固有地进行一次播放一次检查,即使它是他们网站不可或缺的一部分。拥有一个持久变量is_playing 之类的东西不会太难,但是如果您打开了播放器的多个标签,这会遇到问题。

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

      【讨论】:

      • 是的,我的播放器只有一页。页面中只有一个玩家。
      • 那应该没问题。只需在 $(document).ready 上实例化一个全局变量,如果它不是 nil,则使用它来 1) 找到正在播放的歌曲,2) 暂停该歌曲实例,3) 将 var 更新为当前歌曲。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多