2

プレイリストからSpotifyトラックを正常にロードし(トラック名を画面にトレースして確認)、とを使用して再生するために渡しましsp_session_player_loadsp_session_player_play(sess, 1)

ただし、music_deliveryコールバックが呼び出されることはありません(いつ呼び出されるかを示すトレースがあります)。libspotify FAQは、API内の内部スレッドによって呼び出されることを示唆しているようでありsp_session_process_events、ストリーミングを開始するために呼び出す必要はありません。

私のアプリケーションはシングルスレッドなので、コードにロックの問題はないと思います。


出典:

libspotify Haskellバインディング: https ://github.com/mrehayden1/libspotify (これをコンパイルするにはlibspotifyをインストールする必要があります: https ://developer.spotify.com/technologies/libspotify/#download )

アプリケーションコード: https ://github.com/mrehayden1/harmony

4

1 に答える 1

2

いくつかのアイデア:

sp_session_process_eventsストリーミングを開始するために呼び出す必要はありません。

これはある程度正しいですが、コールバックを受け取ったときにトリガーする必要があります。これは別のスレッドで行われるため、呼び出しを行うには、これをメインスレッドに正しく委任する必要があります。sp_session_process_eventsnotify_main_thread

スレッドは1つしかないということなので、どこかでタイトなループで回転していないことを確認してください。while (!sp_track_is_loaded(track)) {}たとえば、呼び出しを行うスレッドではlibspotifyで多くの作業が行われるため、これを行うとlibspotifyは次のようになります。仕事をすることができず、すべてが停止します。

sp_session_player_loadとを使用して再生するために渡しましたsp_session_player_play(sess, 1)

これらの呼び出しの結果は何ですか?メタデータの読み込みは再生用の読み込みと同じではないため、SP_ERROR_IS_LOADING再生呼び出しから戻ってくる可能性があります。また、他の理由でトラックが再生できない場合があるため、エラーが重要です。


それでも問題が解決しない場合は、バインディングまたはコードの他の場所に問題がある可能性があります。再生のC実装の例については、libspotifyに付属のジュークボックスの例を確認してください。

于 2013-01-06T16:51:22.437 に答える