Pygame 如何获取上一首歌曲

Pygame how to get previous song

我想让程序在用户决定按下按钮时转到上一首歌曲(请注意,我是在 raspberry pi 上这样做的)。问题是我不知道如何让程序播放到上一首歌曲。我到了可以转到下一首歌曲的地步,我也尝试了 'pygame.mixer.music.rewind()' 但这只会转到当前歌曲的开头。

def prevSong():
    print("musiclist is ",musiclist)
    print('Playing previous song')
    pygame.mixer.music.rewind()

def nextSong():
    pygame.mixer.init()
    print("musiclist is ",musiclist)
    print('                      ')
    random_song = random.choice(musiclist)
    randSong = pygame.mixer.music.load(random_song)
    print('Playing next song: {}'.format(random_song))
    pygame.mixer.music.play()
    musiclist.remove(random_song)

我想对 prevSong() 进行更改。函数 nextSong() 是一个继续的例子。有什么建议么?谢谢

编辑 1:Ok 所以我创建了一个名为 'prevSongList' 的新列表,但我无法理解我应该如何附加歌曲

def playMusic():
    pygame.mixer.init()
    print("musiclist is ",musiclist)
    print('                      ')
    random_song = random.choice(musiclist)
    randSong = pygame.mixer.music.load(random_song)
    prev = prevSongList.append(randSong)
    print('Playing song: {}'.format(random_song))
    pygame.mixer.music.play()

正如您所添加的,您应该创建一个包含所有播放歌曲的数组。为了能够正确访问上一个,您还应该有一个变量来告诉您当前在列表中的位置。

在您的 prevSong 函数中,您可以在索引列表之前简单地访问歌曲。类似于:

def prevSong():
    print("musiclist is ",musiclist)
    print('Playing previous song')
    #you should add a if there in case there is no previous song
    currentIndex-- #remove 1 to the current index 
    lastSong = prevSongList[currentIndex]
    #play the song
    pygame.mixer.music.load(lastSong)

并且在您的 nextSong 函数中,在添加随机歌曲之前,检查是否还没有 currentIndex+1 的歌曲。

关于你的错误,我想是因为线路

prev = prevSongList.append(randSong)

我不确定是什么 pygame.mixer.music.load(random_song) returns 但它可能不是字符串,您应该使用歌曲的名称:

prev = prevSongList.append(random_song)

同意你应该将歌曲保存在列表中,你也可以做一个 dj class 这样你就可以扩展它

class DJSongify:

    def __init__(self):
        self.previous = location.music
        self.songlist = []   
    def songlist_continue(self,song)
        self.previous = song
        self.songlist.append(song)

这可以让您跟踪并在 DJ 上执行其他操作 class,例如在歌曲列表对于 Rasberry Pi 来说太大时对其进行垃圾收集。您甚至可以设置歌曲列表限制并通过 class 那样处理它。