1

我正在使用最新版本的 libspotify API (12.1.51)。我正在使用 C# 和 libspotify.NET(libspotify 的简单互操作包装库)进行编码。我已经构建了一个使用 libspotify API 创建播放列表的程序。我正在使用最新的 Windows 原生 Spotify 客户端来检查我创建的播放列表。

我已经构建了一个程序,它等待播放列表名称和曲目 URI 列表或一个专辑 URI 并创建相应的播放列表。如果提供了专辑 URI,则专辑中的所有曲目都将添加到新的播放列表中,否则提供的曲目 URI 列表将用于创建新的播放列表。程序一直等到回调

playlist_update_in_progress

在接受要创建的新播放列表之前调用并且 done 参数等于 true。

它运行良好,只是有时创建的播放列表没有名称但确实包含所有曲目。我可以告诉程序创建完全相同但没有名称的播放列表,它可能会在第二次工作。它是随机发生的,但我注意到如果我创建大约 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 以便控制台在 Busy = false 之前不会读取任何输入,这在调用 playlist_update_in_progress 回调并且 done 为 true 时发生。然后它再次读取输入...

任何帮助将不胜感激。

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 回答