我使用的是最新版本的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客户端中添加的播放列表,并创建播放列表并随机查看没有名称的播放列表。播放列表几乎在调用回调的同时出现,并且完成等于true(当然,并非总是存在延迟)。我尝试手动重命名Spotify客户端for Windows中的播放列表没有问题(如果你愿意,播放列表名称长度为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回调并且为true时发生。然后它再次读取输入...
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
我们有很多应用程序在内部和外部运行libspotify,我们在库中没有这样的问题,这表明这不是libspotify中的错误。
可能导致这种情况发生的一些指示:
确保您正确管理线程。当你得到一个notify_main_thread()
调用(到达某个后台线程)时,必须从主线程异步调用sp_sesion_process_events()
,所以你需要确保你正在编组这正好适合主线程。如果这个过程不能正常工作,那么东西就会开始变得怪异。
由于您正在执行许多操作,因此请确保libspotify有时间将所有更改与服务同步。 playlist_update_in_progress
用于在播放列表发生多个突变时通知您,并且当更改从其他地方传入时通常很有用。相反,playlist_state_changed
是您收听此类更改所需的内容(通常,在重命名后,我相信播放列表会在应用更改时进入“加载”状态,然后退出(即sp_playlist_is_loading
1}}完成后再次返回false
。
此外,当您退出应用程序时,请确保执行sp_session_logout()
调用并等待logged_out
回调被触发,然后退出。如果不这样做,某些更改可能无法与服务同步。