Soundcloud自定义播放器动态添加和播放歌曲

2024-05-05

我在用soundcloud自定义播放器 https://github.com/soundcloud/soundcloud-custom-player创建一个可以播放所有歌曲的播放器 我的网站。当我只放置任何曲目或帖子的静态网址时,这效果非常好。但我想要的是将歌曲动态添加到列表中。

我做了很多研究但无法让它发挥作用。我想要的是整个网站上有多个玩家。有点儿(http://soundcloud.com http://soundcloud.com),顶部会有一个主要播放器(如 soundcloud),它会在网站上播放大约 100 首最新歌曲,并且会有一个较小的播放器,单击它只会将该歌曲附加到列表中并开始播放该歌曲。

我不确定这是否是正确的过程。如果有人能给我任何提示我如何进一步进行,那就太好了。


在 Wiki 上做了很多研究后,研究了代码sc-player.js以及一些测试,我想我已经找到了解决您问题的方法。请尝试以下操作:

首先,将此代码添加到sc-player.js文件,就在评论之前// the default Auto-Initialization(这一行相当于文件末尾之前的8行)

$.scPlayer.loadTrackInfoAndPlay=function($elem,track){
        var playerObj=players[$elem.data('sc-player').id];
        playerObj.tracks.push(track);
        var index =playerObj.tracks.length-1;
        var $list=$(playerObj.node).find('.sc-trackslist');
        var $artworks=$(playerObj.node).find(".sc-artwork-list");
        // add to playlist
        var $li=$('<li><a href="' + track.permalink_url +'">' + track.title + '</a><span class="sc-track-duration">' + timecode(track.duration) + '</span></li>')
            .data('sc-track', {id:index})
            .appendTo($list);
        // add to artwork list
        $('<li></li>')
            .append(artworkImage(track, true))
            .appendTo($artworks)
            .data('sc-track', track);
        $li.click();
    }

上面的函数负责将新曲目添加到播放列表并开始播放该曲目。

现在,假设您有播放器的 html 代码

<h2>Top Player</h2>
<div id="topPlayer">
    <div class="sc-player">
        <a href="http://soundcloud.com/matas/matas-petrikas-live-at-gravity-club-30-05-2008">My live track</a>
        <a href="http://soundcloud.com/matas/on-the-bridge">On the bridge</a>
    </div>
</div>
<h2>Small Player</h2>
<div id="smallPlayer">
    <a href="http://soundcloud.com/forss/sets/soulhack" class="sc-player">Soulhack</a>
</div>

确保包裹好你的sc-players in a div,最好有一个id,因此您可以稍后在 Javascript 中引用玩家:

最后,您可以使用此 Javascript 代码来检测何时单击曲目smallPlayer并添加并播放该曲目topPlayer

$(function(){
    var $topPlayer=$("#topPlayer .sc-player");//Top player
    var $smallPlayer=$("#smallPlayer .sc-player");//Small Player
    $smallPlayer.on("onPlayerInit.scPlayer",function(evt){//When player is ready
        $smallPlayer.on("onPlayerTrackSwitch.scPlayer",function(evt,track){//Listen to track switch in smallPlayer
            setTimeout(function(){//Wait a bit, to avoid playing problems between both players
                $.scPlayer.loadTrackInfoAndPlay($topPlayer, track);
            },250);
        });
    });
});

就是这样!

EDIT

如果您只有要添加的歌曲的 url,则可以执行以下操作:

首先,将这个其他函数添加到sc-player.js文件,就在上一个之后loadTrackInfoAndPlay功能:

$.scPlayer.loadTrackUrlAndPlay=function($elem,url){
    var apiUrl = scApiUrl(url, apiKey);
    $.getJSON(apiUrl, function(data) {
        if(data.duration){
          data.permalink_url = url;
          $.scPlayer.loadTrackInfoAndPlay($elem,data);//Call the previous function
        }
    });
}

现在,假设您有歌曲 URL 的代码:

<p>
    The links <br />
    <a class="songUrl" href="https://soundcloud.com/feintdnb/coldplay-fix-you-feint-bootleg">Coldplay-Fix you</a><br />
    <a class="songUrl" href="https://soundcloud.com/nct-1/nct-you-preview-out-soon-for">NCT - You</a><br />
    <a class="songUrl" href="https://soundcloud.com/tufftouch/devil-eyes-konflix-feat-leanne">Konflix - Devil Eyes</a>
</p>

然后,您可以使用此代码将歌曲添加到播放列表并开始播放(或者如果歌曲已存在,则直接播放)

$(".songUrl").click(function(event){
    event.preventDefault();
    var url=$(this).attr("href");//Url of the song
    //If the song is in the tracks list, this line finds it
    var $theSong=$topPlayer.find(".sc-trackslist a[href='"+url+"']");
    if($theSong.length==0){//
        $.scPlayer.loadTrackUrlAndPlay($topPlayer,url );
    }else{
        $theSong.parent().click();//Fire click = play the song
    }
});

这就是所需要的全部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Soundcloud自定义播放器动态添加和播放歌曲 的相关文章

随机推荐

  • 当你不需要Python中的索引时,如何创建For循环? [复制]

    这个问题在这里已经有答案了 如果我需要一个forPython 中的循环 for i in range 1 42 print spam 但不要使用i对于任何事情 pylint 都会抱怨未使用的变量 我应该如何处理这个问题 我知道你可以这样做
  • 关于Java中trim()方法的查询

    我之前提出了一个问题 但遭到了严厉的批评 所以我在这里再次提出 更简单 并重新措辞以吸引那些可能担心我之前提出问题的方式的人 背景 我正在解析一些 HTML 以获取信息 我将所有内容隔离在一系列行中 但我希望抓取的内容以及后面的一堆空格 为
  • 在哪里声明类常量?

    我使用类成员来保存常量 例如 function Foo Foo CONSTANT1 1 Foo CONSTANT2 2 这工作得很好 除了它看起来有点无组织 所有代码都特定于Foo遍布全球范围 所以我考虑将常量声明移到内部Foo 声明 但是
  • C 获取监听服务器的IP

    我正在使用 C 套接字编写客户端 服务器程序 我指定服务器可以通过使用 sockaddr in sin addr s addr 中的 INADDR ANY 侦听任何网络接口 这相当于 IP 0 0 0 0 我可以获取服务器正在监听的实际IP
  • APT:Post-Invoke 在 debian:bookworm-slim 上失败

    我有一个 Jenkins 管道 它使用docker dind 20 在这个过程中我做 FROM ruby 3 2 slim bookworm apt get update 当我尝试使用我的本地构建映像 MacOS ventura 时dock
  • 如何使用静态方法最小起订量静态类(UnitOfWork 情况)?

    我有这些课程 public static class UnitOfWorkSS public static IUnitOfWork Begin return IoC Resolve
  • CSS:变换:翻译(-50%,-50%)使文本模糊[重复]

    这个问题在这里已经有答案了 我想将我的div我使用这种方法 但它使我的文本在div blurry div top 50 left 50 webkit transform translate 50 50 transform translate
  • iOS - App Store - 更改订阅的到期日期

    我想使用 Play 商店 API 更改 Play 商店中订阅的到期日期 我有一个移动应用程序 您可以在其中购买续订应用商店订阅或者您可以从应用程序中的促销活动中免费获得一些时间 这里的主要问题是如果您已从 App Store 购买了订阅 并
  • Dispatcher.BeginInvoke() 未异步运行

    这是我想做的事情的简化版本 onClick abutton a aNewMethod 将异步运行以保持 UI 响应 就是这样 我读过一些答案 这是我能想到的 private async void button Click object se
  • 如何建立数据流挖掘的滑动窗口模型?

    我们遇到的情况是 流 来自传感器的数据或服务器上的点击流数据 采用滑动窗口算法 我们必须将最后 例如 500 个数据样本存储在内存中 然后 这些样本用于创建直方图 聚合并捕获有关输入数据流中异常的信息 请告诉我如何制作这样的滑动窗 如果您询
  • Kotlin 高阶函数参数:传递子类型

    我在 Kotlin 中遇到了函数参数的问题 我将借助一些代码来解释这个问题 我创建了一个类层次结构 当我将子类型传递给需要父类型的函数时 没有问题 open class A val i Int class B val j Int A j f
  • 格式化小数 2 位 - 没有尾随零

    格式 格式化我的数字 但它会将我的小数点向上舍入 我需要保留我的小数 有这样的格式吗 谢谢 广告尽可能多 根据需要 To always显示小数位 使用0代替
  • 使用服务器发送事件进行双向客户端-服务器通信(而不是 WebSocket)的缺点

    最近 我发现服务器发送事件是 WebSocket 的一种更简单的替代方案 用于从服务器进行推送 大多数比较它们的地方 例如here https stackoverflow com questions 5195452 websockets v
  • Glide:如何使用 Glide v4 调整 gif 大小并将其另存为文件?

    我想调整 gif 文件的大小并保存它 我尝试使用一些建议的方法 但这些方法给出了错误 后来我知道有些方法在 Glide 中已被弃用v4 byte bytes Glide with context asGif load url toBytes
  • 如何在angularjs中读取pdf流

    I got the following PDF stream from a server 如何在 AngularJS 中读取这个流 我尝试使用以下代码在新窗口中将其作为 PDF 文件打开 success function data wind
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • 推断类型和动态类型

    在编程语言中 推断类型和动态类型有什么区别 我了解动态类型 但不明白动态类型与推断类型有何不同以及有何不同 有人可以用一些例子来解释一下吗 推断类型 在编译时设置一次 实际上 推断的部分只是节省时间 因为如果编译器可以计算出类型名 则您不必
  • Android 自定义对话框中的图标

    有没有一种方法可以在不使用 AlertDialog 方法的情况下在自定义对话框上设置图标 对话框有标题 但缺少漂亮的分隔线和设置图标的功能 但肯定有一种方法可以在不使用 AlertDialog 的情况下获得两者 您可以使用以下代码添加图标
  • OnSharedPreferenceChangeListener 未调用 #2

    好吧 我开始从 Google 的 android 实现这个可怕的代码 未调用 OnSharedPreferenceChangeListener 这是我的代码 你能建议一下吗 类定义 private SharedPreferences sPr
  • Soundcloud自定义播放器动态添加和播放歌曲

    我在用soundcloud自定义播放器 https github com soundcloud soundcloud custom player创建一个可以播放所有歌曲的播放器 我的网站 当我只放置任何曲目或帖子的静态网址时 这效果非常好