我已成功从播放列表中加载Spotify曲目(通过将曲目名称跟踪到屏幕进行验证),将其传递给使用sp_session_player_load
和sp_session_player_play(sess, 1)
进行播放。
但是我的music_delivery
回调从未被调用过(我在那里有一些痕迹可以显示它)。 libspotify FAQ似乎意味着它将由API内部的线程调用,我不需要调用sp_session_process_events
来启动流式传输。
我的应用程序是单线程的,所以我假设我的代码中没有锁定问题。
来源:
libspotify Haskell绑定: https://github.com/mrehayden1/libspotify (您将需要安装libspotify才能进行编译:https://developer.spotify.com/technologies/libspotify/#download)
答案 0 :(得分:2)
一些想法:
我不需要调用
sp_session_process_events
来启动流式传输。
这有点正确,但是,当你得到一个sp_session_process_events
回调时,必须触发notify_main_thread
- 这会在另一个线程中出现,所以你需要正确地委托这个回到主线程进行通话。
既然你提到你只有一个线程,请确保你没有在一个紧密的循环中旋转 - 比如while (!sp_track_is_loaded(track)) {}
- 因为libspotify中的很多工作都在你调用的线程中继续在这样做,这将导致libspotify无法做任何工作,一切都将停止。
通过它使用
sp_session_player_load
和sp_session_player_play(sess, 1)
播放。
这些电话的结果是什么?加载元数据与加载播放不同,因此您可能会从播放通话中获取SP_ERROR_IS_LOADING
。此外,由于其他原因,曲目可能无法播放,因此错误非常重要。
如果您仍遇到问题,则问题可能出在绑定或代码中的其他位置。检查libspotify附带的光盘机示例,以获取播放的示例C实现。