3

質問は非常に単純に聞こえますが、トラック uri が正しいかどうかを確認する方法が見つかりませんでした。

たとえば、特定の有効なトラック uri spotify:track:5Z7ygHQo02SUrFmcgpwsKWでトラックを再生する通常の手順は次のとおりです。

1) sp_link_create_from_string(const char *$track_uri) で sp_link* を取得

2) sp_link_as_track(sp_link*) で sp_track* を取得する

3) sp_track_add_ref(sp_track*)

4) sp_track_error() が SP_ERROR_OK、または SP_ERROR_IS_LOADING を返し、metadata_updated と SP_ERROR_OK を返した場合、sp_session_player_load と sp_session_player_play がトラックをロードして再生します。

5) sp_track_release() および sp_session_player_unload() がトラックの最後にある場合。

ここで、ユーザーが Spotify のトラック URI にタイプミスをして、Spotify:track:5Z7ygHQo02SUrFmcgpwsKQを再生しようとした場合(最後の文字Qはタイプミスであり、 Wである必要があります)。手順中に発生する可能性のあるすべてのエラー チェックでは、エラーは返されません。

ステップ 1) sp_link が NULL ではない

ステップ 2) sp_track* は NULL ではありません

ステップ 3) SP_ERROR_OK を返す

ステップ 4) sp_track_error() は SP_ERROR_IS_LOADING を返し、metadata_updated は呼び出されず、もちろんプログラムはハングします。

トラックがロードされる前のチェックでは、トラック uri の無効性を見つけることができません。API sp_track_availabilityは方法のように聞こえますが、トラックがロードされていない場合は常に NOT AVAILABLE を返しますが、トラック uri が正しくない場合、トラックは決してロードされません。

何かを見逃したり、API を誤解したりしましたか?

4

2 に答える 2

2

次のようなリンク タイプを確認することで、URI が有効かどうかを確認できます。

enum    sp_linktype { 
  SP_LINKTYPE_INVALID = 0, 
  SP_LINKTYPE_TRACK = 1, 
  SP_LINKTYPE_ALBUM = 2, 
  SP_LINKTYPE_ARTIST = 3, 
  SP_LINKTYPE_SEARCH = 4, 
  SP_LINKTYPE_PLAYLIST = 5, 
  SP_LINKTYPE_PROFILE = 6, 
  SP_LINKTYPE_STARRED = 7, 
  SP_LINKTYPE_LOCALTRACK = 8, 
  SP_LINKTYPE_IMAGE = 9 
}

これにより、次のようにリンク チェックを実行する可能性が残ります。

  1. sp_link_type(link) == SP_LINKTYPE_TRACK かどうかを確認します
  2. sp_link_as_track(link) から sp_track* トラックを作成するか、sp_track_get_playable(sp_link*, sp_session*)
  3. ロードされるのを待ってから、可用性を確認してください
于 2012-08-26T22:44:13.650 に答える
0

トラック uri spotify:track:5Z7ygHQo02SUrFmcgpwsKW をブラウザのアドレス バーにコピーして Enter すると、自動的に Spotify アプリに切り替わり、そのアルバムにロケートされます。

于 2012-11-23T16:27:22.803 に答える