libspotify:music_delivery回调未触发

时间:2013-01-06 15:28:24

标签: haskell spotify ffi

我已成功从播放列表中加载Spotify曲目(通过将曲目名称跟踪到屏幕进行验证),将其传递给使用sp_session_player_loadsp_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

应用程序代码: https://github.com/mrehayden1/harmony

1 个答案:

答案 0 :(得分:2)

一些想法:

  

我不需要调用sp_session_process_events来启动流式传输。

这有点正确,但是,当你得到一个sp_session_process_events回调时,必须触发notify_main_thread - 这会在另一个线程中出现,所以你需要正确地委托这个回到主线程进行通话。

既然你提到你只有一个线程,请确保你没有在一个紧密的循环中旋转 - 比如while (!sp_track_is_loaded(track)) {} - 因为libspotify中的很多工作都在你调用的线程中继续在这样做,这将导致libspotify无法做任何工作,一切都将停止。

  

通过它使用sp_session_player_loadsp_session_player_play(sess, 1)播放。

这些电话的结果是什么?加载元数据与加载播放不同,因此您可能会从播放通话中获取SP_ERROR_IS_LOADING。此外,由于其他原因,曲目可能无法播放,因此错误非常重要。


如果您仍遇到问题,则问题可能出在绑定或代码中的其他位置。检查libspotify附带的光盘机示例,以获取播放的示例C实现。