我有一个Raspberry Pi 3b,我正在用它来播放音乐。当按下按钮(GPIO)时,我想播放一首歌曲。我正在使用vlc媒体列表播放器执行此操作。我通过从目录中获取N个随机mp3文件来构建媒体列表。
例如:
i=vlc.Instance()
l=i.media_list_new()
l.insert_media(i.media_new(...)) # this loops and grabs random mp3s
p=i.media_list_player_new()
p.set_media_list(l)
p.play()
另一个GPIO信号将调用p.stop()。我想知道的是,媒体列表中的哪些歌曲已经播放。这样,我可以跟踪它们,而下次再次按下“播放”按钮时就不再播放它们,但是列表中未播放的曲目仍然可以播放。
到目前为止,我还没有任何方法可以从媒体列表播放器中获取有关列表中正在播放的项目的信息,也看不出从列表中播放了什么内容的另一种方法。
我尝试了一种手动循环播放歌曲列表并使用常规播放器(而非列表播放器)的替代方法,但是当我这样做时,我必须执行while True
循环以使播放器等待一首歌曲在播放下一首之前完成。这个循环似乎也由于某种原因阻塞了我的GPIO事件处理程序,并且未检测到按下STOP按钮(必须取消脚本以停止)。
答案 0 :(得分:0)
我的建议是:不要使用MediaListPlayer
。
将MediaList
与MediaPlayer
一起使用,并收听libvlc_MediaListEndReached
https://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc.html
循环,使播放器在播放下一首歌曲之前先等待一首歌曲
使用libvlc事件。
答案 1 :(得分:0)
实际上是使用MediaListPlayer和事件来完成此工作的。我为MediaListPlayerNextItemSet添加了一个事件处理程序,该事件处理程序调用一个使计数器递增的函数,因此我知道列表中现在播放了多少首歌曲。