我使用的是最新版本的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时发生 . 然后再次读取输入...
任何帮助将受到高度赞赏 .
1 回答
我们有许多应用程序在内部和外部运行libspotify,我们没有像库这样的问题,这表明这不是libspotify中的错误 .
一些可能导致这种情况发生的指针:
确保正确管理线程 . 当你得到一个
notify_main_thread()
调用(它到达某个后台线程)时,你必须从主线程异步调用sp_sesion_process_events()
,所以你需要确保're marshalling this over to the main thread properly. If this process isn' t正常工作,东西会开始表现得很奇怪 .由于您正在执行许多操作,请确保libspotify有时间将所有更改与服务同步 .
playlist_update_in_progress
旨在在播放列表发生多个突变时通知您,并且当更改从其他地方传入时通常很有用 . 相反,你需要playlist_state_changed
来听取这样的变化(通常,在重命名后,我相信播放列表在应用更改时进入"loading"状态,然后在完成后退出(即sp_playlist_is_loading
再次返回false
) .此外,当您退出应用程序时,请确保执行
sp_session_logout()
调用并等待logged_out
回调被触发,然后退出 . 如果不这样做,某些更改可能无法与服务同步 .