2

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

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

4

1 回答 1

2

一些想法:

我不需要调用sp_session_process_events来开始流式传输。

这有点正确,但是,您必须sp_session_process_events在收到回调时触发notify_main_thread——这来自另一个线程,因此您需要正确地将其委托回您的主线程以进行调用。

既然你提到你只有一个线程,请确保你没有在某个地方的紧密循环中旋转——比如while (!sp_track_is_loaded(track)) {}——因为 libspotify 中的很多工作都在你调用的线程中进行,这样做会导致 libspotify不能做任何工作,一切都将陷入停顿。

传递它以使用sp_session_player_loadand播放sp_session_player_play(sess, 1)

这些调用的结果是什么?加载元数据与加载播放不同,因此您可能会SP_ERROR_IS_LOADING从播放调用中恢复过来。此外,由于某些其他原因,该曲目可能无法播放,因此错误很重要。


如果您仍然遇到问题,则问题可能出在绑定或代码中的其他地方。查看 libspotify 附带的点唱机示例,以获取播放的示例 C 实现。

于 2013-01-06T16:51:22.437 回答