Python libvlc动态播放列表
我正试图将一台20世纪50年代的自动点唱机转换为在我的人洞里播放mp3曲目,所以我扔下一枚硬币,选择两首曲目,它们被添加到我的播放列表中,我的Raspberry Pi开始播放这些曲目。我会选择更多的曲目,当它们还在播放时,它们会被加入 我已经有了基本的代码,但3周后我仍然无法让libvlc播放曲目,一旦播放列表结束,我知道这与加载媒体列表有关,但我就是解决不了 我有一个GPIO输入,它向播放列表中添加了一个新的曲目,它似乎正在添加,但它们从未播放过 我尝试了很多方法,本周我使用了一个我发现可以让它工作的类——都失败了,只是没有太多的示例代码来查看动态修改播放列表,它们似乎都在目录上工作,而对于用户选择随机曲目的自动存储塔,这些目录是不起作用的 我所追求的是能够在播放时将曲目添加到播放列表中,并在播放列表运行时将这些曲目添加到播放列表中Python libvlc动态播放列表,python,libvlc,Python,Libvlc,我正试图将一台20世纪50年代的自动点唱机转换为在我的人洞里播放mp3曲目,所以我扔下一枚硬币,选择两首曲目,它们被添加到我的播放列表中,我的Raspberry Pi开始播放这些曲目。我会选择更多的曲目,当它们还在播放时,它们会被加入 我已经有了基本的代码,但3周后我仍然无法让libvlc播放曲目,一旦播放列表结束,我知道这与加载媒体列表有关,但我就是解决不了 我有一个GPIO输入,它向播放列表中添加了一个新的曲目,它似乎正在添加,但它们从未播放过 我尝试了很多方法,本周我使用了一个我发现可以让
class AudioPlayer:
def __init__(self):
self.instance = vlc.Instance()
self.mediaplayer = self.instance.media_player_new()
self.mediaplayer.audio_set_volume(25)
self.event_manager = self.mediaplayer.event_manager()
self.event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, self.trackEnded)
self.event_manager.event_attach(vlc.EventType.MediaPlayerMediaChanged, self.changed_track)
self.titleNum = 0
self.playlist = []
print ("Player Created")
def add_to_playlist(self, newtrack):
self.playlist.append(newtrack)
def loadTrack(self, path):
return self.instance.media_new(path)
print("track loaded")
def playTrack(self, track):
self.mediaplayer.set_media(track)
print("PLAYING TRACK")
self.mediaplayer.play()
def playCurrTrack(self):
print("trying to load new track...")
track = self.loadTrack(self.playlist[self.titleNum])
print("trying to play track...")
self.playTrack(track)
def trackEnded(self, event):
print("Track ended")
self.nextTrack()
def changed_track(self, event):
print("Track Changed")
def prevTrack(self):
self.setTitle(self.getTitle()-1)
self.playCurrTrack()
def nextTrack(self):
self.setTitle(self.getTitle()+1)
self.playCurrTrack()
def getTitle(self):
return self.titleNum
def setTitle(self, number):
self.titleNum = number
if self.titleNum < 0:
self.titleNum = len(self.playlist) + self.titleNum
elif self.titleNum >= len(self.playlist):
self.titleNum = len(self.playlist) - self.titleNum
print("track %i of %i: %s" % (self.titleNum+1, len(self.playlist), self.playlist[self.titleNum]))
我有一个模拟自动存储塔的小方法,叫做随机选择器:
def random_selector():
#removed R for Radio & V for playlists
string.letters="ABCDEFGHJKLMNPQST"
string.numbers="12345678"
LET = random.choice(string.letters)
NUM = random.choice(string.numbers)
track_choice = m_path+LET+NUM
return track_choice
通过GPIO调用此方法以模拟自动存储塔选择:
def new_track_callback(channel):
# call new track when button pressed
global myplayer
myplayer.add_to_playlist(random_selector())
print ("New Track Added")
编辑以包含输出,本质上我在playTrack中添加了另一个打印命令,以确保其实际被激发正常,还打印轨迹以确保其获得值:
Track ended
Get Next Track
track 2 of 2: /mnt/usb/C4
trying to load new track...
trying to play track...
Entered playTrack
<vlc.Media object at 0x7649ef50>
曲目结束
进入下一轨道
第2轨,共2轨:/mnt/usb/C4
正在尝试加载新曲目。。。
正在尝试播放曲目。。。
进入游戏轨道
Track ended
Get Next Track
track 2 of 2: /mnt/usb/C4
trying to load new track...
trying to play track...
Entered playTrack
<vlc.Media object at 0x7649ef50>