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 が発生するので、もう一度トラックを再生しようとします。

確認するには、 を入れてみてconsole.log("playing next track")、js コンソールを見て、それが起こるかどうかを確認してください。

そうである場合はplayer.track.uri === queue[index].uri、false かどうかを確認してから、キュー内の次のトラックを再生してみてください。

于 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 に答える