1

さまざまな libspotify API 関数がイメージ ID を処理します。

これらはすべて、イメージ ID を次のように返しますconst byte*

sp_album_cover
sp_artist_portrait
sp_artistbrowse_portrait
sp_image_image_id

sp_image_createはイメージ ID パラメータを として受け取り、イメージ ID パラメータは としてconst byte[20]取りsp_playlist_get_imagebyte[20]それにイメージ ID 値を入力します。

この質問で、Spotify の従業員は、イメージ ID の内容は不透明であり、サイズ 20 はイメージ ID の正確な長さであるとは限らないと言っています: libspotify API: image ID format?

sp_image_create は、20 バイト長の image_id パラメータを使用します。image id の最大長は 20 バイトということですか?

いいえ。sp_subscribers は、コンパイラに偽の番号を挿入した別の例です。イメージ ID ポインタの内容は不透明で、リリース間で変更される可能性があります。それらについて仮定するコードを書かないでください。壊れるからです。

ただし、 を使用するsp_playlist_get_imageには、呼び出し元が配列を割り当ててイメージ ID を格納する必要があります。これは一貫性のないアドバイスのように思われるか、少なくとも驚くべきことです。次の中でどれが正しいですか?

  • 解釈 A:イメージ ID は常に正確に 20 バイトになります。
  • 解釈 B:イメージ ID の長さは、最大 20 バイトです。
  • 解釈 C:イメージ ID の長さは任意ですが、返されるイメージ ID はsp_playlist_get_image20 バイト以下であることが保証されています。
  • 解釈 D:イメージ ID の長さに制限sp_playlist_get_imageはなく、安全に使用することはまったくできません。

リンクされた質問への答えはAとおそらくBを除外すると思うので、答えはおそらくCだと思います。完全な悲観主義者は D を選ぶかもしれません。

既存のlibspotify.netよりも安全で高レベルの .NET ラッパーを作成しようとしており、マネージ コードでイメージ ID を表示する方法がわからないため、興味があります。唯一の方法は、2 つの代替実装を用意することだと思いsp_playlist_get_imageます。ライブラリがイメージ ID のサイズと性質について十分な保証をしていれば、いつでも自分のバッファを使用して、必要に応じてそこにコピーすることができますが、libspotify がこれを許可するほど強力な保証をどこでも行う可能性は低いと思われます。

4

1 に答える 1

3

libSpotify の現在のリリースでは、解釈 Cがその特定の呼び出しに対して正しいです。byte[20] を使用するため、この関数は、20 バイトを割り当てれば、常にプレイリストのイメージ ID に十分な量を確保できることを保証します。その保証が将来変更された場合、それまでに他のすべてのように機能させていないと仮定して、関数の署名が変更されます。

その API の状態を考慮すると、ハイブリッド ソリューションは実際には今のところ最高に思えます。できる限り使用IntPtrすることで、厄介なことがなくなったときの将来性が大幅に高まりsp_playlist_get_imageます。

あなたのプロジェクトがうまくいくことを願っています — 私たちは長い間まともな .NET ラッパーを望んでいましたが、すべてを自分たちで行う時間はありませんでした。オープンソースであれば、喜んで貢献します。

于 2013-01-04T12:07:32.120 に答える