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

Nir*_*Ram 4 javascript jquery audio-streaming soundcloud

我正在使用soundcloud自定义播放器创建一个可以播放我网站上所有歌曲的播放器.当我只放置任何音轨或帖子的静态网址时,这非常有用.但我想要的是动态地将歌曲添加到列表中.

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

我不确定这是否是正确的过程.如果任何人可以给我任何暗示我怎么能继续前进那么它会很棒.

Raú*_*rez 6

在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();
    }
Run Code Online (Sandbox Code Playgroud)

上述功能负责将新曲目添加到播放列表并开始播放曲目.

现在,假设你有玩家的这个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>
Run Code Online (Sandbox Code Playgroud)

确保将你的sc-players 包装成一个div,最好是一个id,这样你以后可以在Javascript中引用玩家:

最后,您可以使用此Javscript代码来检测单击轨道的时间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);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

那就是它!

编辑

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

首先,将此其他函数添加到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
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

现在,假设你有这些歌曲网址的代码:

<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>
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此代码将歌曲添加到播放列表并开始播放(或者只是播放它已存在)

$(".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
    }
});
Run Code Online (Sandbox Code Playgroud)

这就是所需要的.