1

libspotify API の最新バージョン (12.1.51) を使用しています。また、C# と libspotify.NET (libspotify の単純な相互運用ラッパー ライブラリ) を使用してコーディングしています。libspotify API を使用してプレイリストを作成するプログラムを作成しました。作成したプレイリストを確認するために、Windows 用の最新のネイティブ Spotify クライアントを使用しています。

プレイリスト名とトラック URI または 1 つのアルバム URI のリストを待機し、対応するプレイリストを作成するプログラムを作成しました。アルバム URI が指定されている場合、アルバムのすべてのトラックが新しいプレイリストに追加されます。それ以外の場合は、指定されたトラック URI のリストを使用して新しいプレイリストが作成されます。プログラムはコールバックまで待機します

playlist_update_in_progress

が呼び出され、作成する新しいプレイリストを受け入れる前に、done パラメータが true になります。

プレイリストが名前なしで作成されているが、すべてのトラックが含まれている場合があることを除いて、これはうまく機能します。名前のないまったく同じプレイリストを作成するようにプログラムに指示するだけで、2回目は機能する可能性があります。これはランダムに発生しますが、約 200 のプレイリストを作成すると、おそらく 5 ~ 10 のプレイリストに名前が付けられないことに気付きました。プログラムが実行され、プレイリストが作成され、名前のないプレイリストがランダムに表示されると、プレイリストが Spotify クライアントに追加されていることがわかります。プレイリストは、コールバックが呼び出され、done が true となるのとほぼ同時に表示されます (もちろん、常にではなく、遅延が発生する可能性があります)。Windows 用の Spotify クライアントで手動でプレイリストの名前を変更しようとしましたが、問題はありませんでした (プレイリスト名の長さは 0 または空の文字列でした)。ネイティブの Spotify クライアントでは、空のプレイリスト名も許可されません。

私が使う:

sp_playlistcontainer_add_new_playlist

新しいプレイリストを追加するには、IntPtr と C# 文字列を使用してそれに渡してみました。両方を試しました:

[DllImport("libspotify")]
public static extern IntPtr sp_playlistcontainer_add_new_playlist(IntPtr playlistContainerPtr, string name);

[DllImport("libspotify")]
public static extern IntPtr sp_playlistcontainer_add_new_playlist(IntPtr playlistContainerPtr, IntPtr namePtr);

そして、私も試しました

sp_playlist_rename

プレイリストの名前を数回(何らかの修正として)変更しても成功しません。プレイリストが作成されたときにサーバーで何が起こるか正確にはわかりません。これはバグですか、それとも何が起こっているのですか?

私は実際にこれを機能させるために多くのハックを試みましたが、役に立ちませんでした.

プログラムに関する詳細情報:

最初に Spotify に接続し、コンソールからの入力を待ちます。次の文字列の入力をチェックします。

名前とトラックのリストを使用してプレイリストを作成するには:

createplaylistfromtracks "Tracks playlist" spotify:track:36MuLw248uzLPtrJ6073ZR spotify:track:5WPkvx0MARhlWhXp1sJg4k spotify:track:1VrdbSFVU9wJkuDM2sWYVe spotify:track:66RG0BBwpQqHxZs06UUyeo spotify:track:0zp3uPuhnARR1XYsgg5JLV

アルバム URI から名前とトラックのリストを使用してプレイリストを作成するには:

createplaylistfromalbum "Album playlist" spotify:album:5rVwDKRKa1FjDlLofDZyRb

次に、プログラムは入力を解析してプレイリストを作成し、フラグ Busy = true を設定して、プレイリスト_update_in_progress コールバックが呼び出され、done が true になるときに発生する Busy = false まで、コンソールが入力を読み取らないようにします。次に、入力を再度読み取ります...

どんな助けでも大歓迎です。

4

1 に答える 1

0

libspotifyを内部と外部の両方で実行している多くのアプリケーションがあり、ライブラリでこのような問題は発生していません。これは、これがlibspotifyのバグではないことを示唆しています。

これを引き起こす可能性のあるいくつかのポインタ:

  • スレッドを適切に管理していることを確認してください。notify_main_thread()(バックグラウンドスレッドに到着する)呼び出しを受け取ったら、メインスレッドから非同期に呼び出す必要sp_sesion_process_events()があるため、これをメインスレッドに適切にマーシャリングしていることを確認する必要があります。このプロセスが適切に機能していない場合、物事は奇妙に動作し始めます。

  • 多くの操作を行っているため、libspotifyにすべての変更をサービスと同期する時間を確保してください。はplaylist_update_in_progress、プレイリストに複数の変更が発生したときに通知するように設計されており、通常、他の場所から変更が加えられたときに役立ちます。代わりに、そのplaylist_state_changedような変更を聞くために必要なものです(通常、名前を変更した後、変更が適用されている間、プレイリストは「読み込み中」の状態になり、変更が完了すると元に戻ります(つまり、再びsp_playlist_is_loading戻ります)。false

  • また、アプリケーションを終了するときは、必ず呼び出しを実行し、コールバックが発生sp_session_logout()するまで待ってlogged_outから終了してください。そうしないと、一部の変更がサービスと同期されない可能性があります。

于 2013-02-08T11:31:19.957 に答える