3

この質問から受け入れられた回答に従いました: Spotify App API: Play specific track from album

しかし、それは私にはうまくいきません。Spotify はまだアルバムの最初のトラックを再生しています。

view.js を調べてみたところ、最初のトラックが再生されている理由がわかります。

if (play) {
    if (m.player.context !== this._context.uri) {
      m.player.play(this._context.get(0), this._context);
    }

私のコードは以下のとおりです。何か考えや提案はありますか?

var track = models.Track.fromURI(item.SpotifyUrl, function(track) { 
    var album = models.Album.fromURI(track.album.uri, function(album) {
        var trackPlayer = new views.Player();
        var t = album.data.tracks[track.data.trackNumber-1];
        trackPlayer.track = t;      
        album.get = function() {
            console.log(track.name); // I know this is being called
            return track;
        }           
        trackPlayer.context = album;
        var $player = $(trackPlayer.node);
    });
});

前もって感謝します。

アップデート:

私はAPIをさらに見て、models.js内でこれを見つけました:

if (index === -1) {
...
    else if (context instanceof Album) {
        numTracks = context.tracks.length;
        while (i < numTracks) {
            if (context.tracks[i].data.availableForPlayback) {
                track = context.tracks[i];
                index = i;
                break;
            } else {
                i++;
        }

次のメソッド呼び出し:

if (play) {
    if (m.player.context !== this._context.uri) {
      m.player.play(this._context.get(0), this._context);
    }

'index' パラメータを省略します。したがって、プレーヤーは常に最初に利用可能なトラックを再生します! これを回避するために、次を追加しました。

models.player.play = function(track, opt_context, opt_index) {
    return this.playTrackWithContext(track,opt_context,track.data.trackNumber-1);
};

少し厄介な回避策のように思えますが、Spotify がコードを更新するまでは、それを回避する唯一の方法のようです。何かを完全に見逃していない限り、もっと簡単な方法はありますか?

4

0 に答える 0