0

有人在这里问同样的问题。iKendac 回答它。但我需要更多详细信息,但我找不到向问题添加评论的方法,所以我在这里创建了一个新问题。

我希望能够控制Spotify播放的曲目。所以我想禁用上一个和下一个按钮。

似乎解决方案是在不向播放器提供上下文的情况下播放曲目。我做到了,但下一个/上一个没有被禁用。Spotify 作为当前上下文是我加星标的播放列表。

这是一些代码

var sp = getSpotifyApi(1);
var models = sp.require('sp://import/scripts/api/models');
var player = models.player;
var pl_starred = models.library.starredPlaylist;

exports.init = init;

function init() {
    var header = document.getElementById("header");
    var index = Math.floor(Math.random()*pl_starred.length)
    var track = pl_starred.get(index);

    if (pl_starred == null) {
        header.innerText = "starred not found";
    } else if (track == null) {
        header.innerHTML = "cannot get track from starred";
    } else {
        header.innerHTML = "starred " + index + "/" + pl_starred.length + " : " + track.name;
    }

    player.play(track,null);
}

编辑:在 iKenndac 的回答之后进行了一些新的测试

我尝试将曲目与其上下文分开,但它不起作用。所以我尝试使用硬编码的 URI 加载曲目。所以我没有加载加星标的播放列表。但它也没有工作

这是我的代码

function init() {

    var header = document.getElementById("header");

    var player = models.player;

    models.Track.fromURI("spotify:track:3ZfW4Z3MEvd82pv5J0rN2l", function(trackNotInStarred) {
        console.log("Track loaded", trackNotInStarred.name);
        player.play(trackNotInStarred, null);
        header.innerHTML = "starred: " + trackNotInStarred.name;
    }); 
}

新编辑:实际上上一个/下一个按钮没有被禁用,但是如果我单击上一个它会重新启动轨道,然后它会跳转到“无轨道”状态,然后上一个/播放/下一个被禁用。有任何想法吗 ?

4

1 回答 1

0

看起来它是从您从已加星标的播放列表中获取曲目的事实推断上下文的。

试试这个将轨道与上下文分开:

var player = models.player;
var trackInStarred = pl_starred.get(index);

models.Track.fromURI(trackInStarred.uri, function(trackNotInStarred) {
    console.log("Track loaded", trackNotInStarred.name);
    player.play(trackNotInStarred, null);
});
于 2012-05-09T21:37:42.737 回答