libspotify:如何找出轨道uri是否正确且可播放?

时间:2012-08-17 18:47:56

标签: spotify

这个问题听起来非常简单但我无法找到一种方法来检查轨道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轨道上发了一个拼写错误并试图播放 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?

2 个答案:

答案 0 :(得分: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(链接)== SP_LINKTYPE_TRACK
  2. 从sp_link_as_track(链接)创建sp_track *轨道,或者,sp_track_get_playable(sp_link *,sp_session *)
  3. 等待加载,然后检查可用性

答案 1 :(得分:0)

将轨道uri spotify:track:5Z7ygHQo02SUrFmcgpwsKW复制到浏览器的地址栏,然后回车,它将自动切换到spotify应用程序并找到该专辑。