Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python libvlc动态播放列表_Python_Libvlc - Fatal编程技术网

Python libvlc动态播放列表

Python libvlc动态播放列表,python,libvlc,Python,Libvlc,我正试图将一台20世纪50年代的自动点唱机转换为在我的人洞里播放mp3曲目,所以我扔下一枚硬币,选择两首曲目,它们被添加到我的播放列表中,我的Raspberry Pi开始播放这些曲目。我会选择更多的曲目,当它们还在播放时,它们会被加入 我已经有了基本的代码,但3周后我仍然无法让libvlc播放曲目,一旦播放列表结束,我知道这与加载媒体列表有关,但我就是解决不了 我有一个GPIO输入,它向播放列表中添加了一个新的曲目,它似乎正在添加,但它们从未播放过 我尝试了很多方法,本周我使用了一个我发现可以让

我正试图将一台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>