2013-01-04 3 views
1

다양 libspotify API 함수는 화상 ID가 거래 :libspotify : 이미지 ID로 무엇을 할 수 있습니까?

이들 모두 const byte* A와 화상 ID를 반환 :

sp_album_cover 
sp_artist_portrait 
sp_artistbrowse_portrait 
sp_image_image_id 

sp_image_createconst byte[20]로서 화상 ID 파라미터 소요 sp_playlist_get_imagebyte[20]로서 화상 ID 매개 변수를 사용하면서 이미지 ID 값으로 채 웁니다. 이 질문에

는 스포티 파이 직원은 이미지 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의 길이는 제한되지 않지만 에 의해 반환 된 이미지 ID는 20 바이트를 넘지 않습니다.
  • 통역 D : 이미지 ID의 길이는 제한되어 있으며 sp_playlist_get_image은 전혀 사용하지 마십시오.

나는 링크 된 질문에 대한 답은 아마도 A와 B를 배제 생각, 그래서 대답은, 아마도 그만큼 실망 C라고 생각합니다. 완전히 비관적 인 사람이 D와 함께 할 수도 있습니다.

보다 안전하고 높은 수준의 .NET 래퍼를 작성하려고하는데 저는 libspotify.net보다 안전하며 관리되는 코드에 이미지 ID를 표시하는 방법을 모르겠습니다. . 두 가지 대안을 구현하는 것이 유일한 방법이라고 생각합니다. 하나는 sp_playlist_get_image에서 반환 된 이미지 ID를 나타내는 20 바이트 버퍼이고 다른 하나는 다른 것으로부터 반환 된 이미지 ID를 나타내는 IntPtr입니다. 라이브러리가 이미지 ID의 크기와 성질에 대해 충분한 보증을했다면, 필자는 항상 자신의 버퍼를 사용하여 필요할 때 복사 할 수 있었지만, libspotify가 이것을 허용 할만 큼 가까운 곳에 보증 할 가능성은 희박합니다.

답변

3

현재 libSpotify의 릴리스에서는 해석 C이 해당 호출에 적합합니다.byte [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를 얻었습니까? 나는 interop 호출을 위해 Byte [] 타입을 사용하고 있으며, 결코 전달하지 않는 버퍼는 libspotfiy에 의해 채워지거나 변경된 것처럼 보이지 않는다. –