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 那样处理它。
我想让程序在用户决定按下按钮时转到上一首歌曲(请注意,我是在 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 那样处理它。