2

デフォルトのSoundCloudオーディオウィジェットを使用してプレイリストを再生していて、曲をランダムな順序で再生したいと思っています。SoundCloud JavaScript SDK oEmbedオブジェクト(iframeバージョン)を使用しています。

<script src="//connect.soundcloud.com/sdk.js"></script>  

SC.oEmbed("//soundcloud.com/buzzinfly",  { 
  auto_play: true,   
  start_track: random_start_track,  
  iframe: true,  
  maxwidth: 480,  
  enable_api: true,  
  randomize: true 
 },  
 document.getElementById("soundcloud_player"));

ドキュメントにはランダム化またはシャッフル属性については記載されていませんが、start_trackなどの他のドキュメント化されていない属性はoembedでサポートされています。

//developers.soundcloud.com/docs/oembed#parameters
//developers.soundcloud.com/docs/widget

デフォルトのオーディオウィジェットに曲の順序をシャッフルする属性があるかどうか誰かが知っていますか?

そうでない場合は、デフォルトのSoundCloudウィジェットからイベントをキャプチャする方法があるので、曲の終了イベントの後にランダムな曲を再生できますか?カスタムプレーヤーでできるように。

//developers.soundcloud.com/docs/custom-player#events

$(document).bind('onPlayerTrackSwitch.scPlayer', function(event, track){  
  // goto random track   
});  

ありがとう


アップデート

これがgryzzlyの助けを得た後に私が使っているコードです。

次のボタンはうまく機能します。ランダムな曲をスキップできます。残念ながら、トラックの再生が終了すると、プレイリスト内の次の曲と、FINISHイベントでスキップされるランダムトラックの2つの曲のオーディオが聞こえます。

var widget = null;
var song_indexes = new Array();
var current_index = 0;

$(function() {
    var iframe = document.querySelector('#soundcloud_player iframe');
    widget = SC.Widget(iframe);        
    widget.bind(SC.Widget.Events.READY, function() {
        widget.unbind(SC.Widget.Events.FINISH);
        widget.bind(SC.Widget.Events.FINISH, function() {        
            play_next_shuffled_song();
        });

        widget.getSounds(function(sounds) {
            create_shuffled_indexes(sounds.length);
            play_next_shuffled_song();
        });               
    });
    $("#button_sc_next").on("click", play_next_shuffled_song);
});

function play_next_shuffled_song() {
    current_index++;
    if (current_index >= song_indexes.length) {
        current_index = 0;
    }  
    var track_number = song_indexes[current_index];
    widget.skip(track_number);
}

function create_shuffled_indexes (num_songs) {
    for (var i=0;i<num_songs;i++) {
        song_indexes.push(i);
    }
    song_indexes = shuffle(song_indexes);
}

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]
function shuffle(o){ //v1.0
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};
4

1 に答える 1

2

Widget API のドキュメントは、こちら にあります

このための疑似コードは次のようになります。

load widget
get widget sounds LENGTH /* say 5 */
create an ARRAY of that LENGTH and shuffle it /* to have something like [3, 1, 0, 2, 4] */
create function SKIP that will check if ARRAY still has any items in it (length is not 0) and skip player to array.pop() index /* pop will return the last item in the array and return its value */
attach event handler to FINISH events that will run SKIP function
run SKIP function first time yourself

ユーザーがウィジェットの UI の「次へ」コントロールでスキップすると、ウィジェットはリスト内の次の曲を再生します。おそらく何らかの方法でそれを検出し、別のランダムなトラックにスキップできます.

これが役立つことを願っています!

于 2013-03-23T12:51:56.703 に答える