2013-01-04 166 views
1

各種libspotify API函數處理圖像ID:libspotify:我能做什麼,不能用圖像ID做什麼?

這些都返回一個圖像ID作爲const byte*

sp_album_cover 
sp_artist_portrait 
sp_artistbrowse_portrait 
sp_image_image_id 

sp_image_create拍攝圖像ID參數作爲const byte[20],而sp_playlist_get_image拍攝圖像ID參數作爲byte[20]並用圖像ID值填充它。

在這個問題中,一個Spotify的僱員說二者的圖像ID的內容是不透明的,並且20的尺寸不一定是圖像ID的準確長度:libspotify API: image ID format?

sp_image_create取20個字節長的image_id參數。這是否意味着圖像ID的最大長度是20個字節?

編號sp_subscribers是我們爲編譯器添加一個虛假編號的另一個示例。圖像ID指針的內容是不透明的,並且可能在版本之間改變。不要編寫對其進行假設的代碼,因爲它會中斷。

然而,爲了使用sp_playlist_get_image,呼叫者需要分配陣列來存儲圖像ID。這似乎是不一致的建議,或者至少令人驚訝。以下內容哪些是對的?

  • 解釋A:圖像ID總是正好20個字節。
  • 解釋B:圖像ID的長度可能最多爲20個字節。
  • 解釋C:圖像ID可能是任意長度,但sp_playlist_get_image返回的圖像ID保證不超過20個字節。
  • 解釋D:圖像ID可能是任意長度,並且sp_playlist_get_image根本無法安全使用。

我想對鏈接的問題的答案排除A和可能B,所以我認爲答案可能是C,因爲這是令人沮喪的。一個完全的悲觀主義者可能會與D.

我感興趣,因爲我想寫一個比現有libspotify.net更安全和更高級別的.NET包裝,我不確定如何在託管代碼中呈現圖像ID 。我認爲唯一的辦法是有兩個可選的實現 - 一個具有20字節緩衝區,表示從sp_playlist_get_image返回的圖像ID,另一個具有表示從其他任何返回的圖像ID的IntPtr。如果圖書館對圖像ID的大小和性質做了充分的保證,我可以隨時使用我自己的緩衝區並在必要時複製到其中,但是我擔心看起來libspotify不太可能在任何地方靠近足夠強的地方提供保證。

回答

3

對於libSpotify的當前版本,解釋C對於該特定調用是正確的。由於它佔用了字節[20],該功能保證瞭如果您分配了20個字節,則您將始終擁有足夠的播放列表的圖像ID。如果這種擔保在未來發生變化,那麼函數簽名將會改變,假設我們尚未像其他所有事情那樣工作。

考慮到API的狀態,您的混合解決方案實際上聽起來是最好的。使用IntPtr,當那個令人討厭的sp_playlist_get_image消失時,您將可以更加面向未來。

我希望你的項目進展順利 - 我們一直想要一個體面的.NET包裝多年,但從來沒有時間去做整個事情。如果它是開源的,我會很樂意貢獻。

+0

意圖是開源它。我希望在下個月左右將它放在github上。當我這樣做的時候會在https://github.com/organizations/openhome的某處。 – Weeble

+0

前面提到的C#包裝庫現在在這裏:https://github.com/openhome/ohLibSpotify – Weeble

+0

您是否爲播放列表工作獲得了imageID?我正在使用類型Byte []進行互操作調用,並且我傳入的緩衝區似乎永遠不會被libspotfiy填充或更改。 –