0

我正在 OSX 机器上为 Spotify (JavaScript) 开发,当我尝试播放歌曲时应用程序崩溃。

我对 API 的调用是:player.play(trackURI);

发生的情况是 Spotify 客户端将播放歌曲大约 1/4 秒,然后它会崩溃。我确实相信正是这种方法使客户端崩溃,因为我已经对其进行了调试。

如果您需要任何其他信息,并且对为什么会发生这种情况有任何线索,我期待着回复。


更多信息:

所以,我设法复制了它。发生的事情是我已经注册了EVENT_CHANGE这样的活动player.observe(models.EVENT.CHANGE, function (e) {

当歌曲结束并开始新的歌曲时,我想播放假队列中的下一首歌曲。因此,我player.play(nextSongId)在 EVENT.CHANGE 被触发时调用e.data.curtrack == true

然后我猜 Spotify 会尝试播放其队列中的下一首歌曲,但后来我想播放我自己的下一首歌曲,所以 Spotify 崩溃了。

4

2 回答 2

1

我认为问题在于,当您告诉 Spotify 播放下一首曲目时,您的观察者会一遍又一遍地被调用。每次您执行 player.play 时,它都会触发另一个 EVENT.CHANGE,并且您将尝试再次播放该曲目。

要验证,请尝试输入 aconsole.log("playing next track")并观察 js 控制台以查看它是否发生。

如果是,请尝试检查是否为player.track.uri === queue[index].uri假,然后播放队列中的下一首曲目

于 2012-04-10T23:10:02.437 回答
0

经过一些修复后,我认为这是因为我在之前调用过 player.play(trackURI) 之后几乎立即调用了它。发生这种情况是因为我正在更改一首歌曲,这触发了 EVENT.CHANGE 事件,然后我再次调用 player.play()。请参阅这段代码,了解处理歌曲更改的好方法。

player.observe(models.EVENT.CHANGE, function (e) {

    // Only update the page if the track changed
    if (e.data.curtrack == true && !justChangedSong) {
        var songId = queue.shift();
        if (songId != null)
        {
            player.play(songId);
            justChangedSong = true;
        }
    }
    else if (justChangedSong)
    {
        justChangedSong = false;
    }
});

此外,如果您有一个名为“下一首歌曲”左右的按钮,请将其连接到playNextSong()方法:

function playNextSong()
{
    var songId = queue.shift();
    if (songId != null)
    {
        player.play(songId);
        justChangedSong = true;
    }
}

似乎 Spotify 不再崩溃了。干杯!

于 2012-04-15T16:03:20.297 回答