如何在 Pygame 中添加音乐播放列表?
在本文中,我们将看到如何在 Pygame 中添加音乐播放列表。
Pygame 有一个方法pygame.mixer() ,它具有有关音频操作的所有功能,例如播放歌曲、排队歌曲、设置音量、倒带、停止、暂停、恢复等等。这个类提供的功能是——
- pygame.mixer.music.load():这将加载音乐文件/文件名对象。
- pygame.mixer.music.play(loops, start,fade_ms) :开始播放已加载的音乐。这需要 3 个参数
- loops:这是一个可选的整数参数,表示歌曲应该重复多少次。如果设置为 -1,则它将无限循环。
- start:它是一个可选的浮点参数,它表示音乐应该从哪里开始播放的时间位置。
- 淡入淡出:它是一个可选的整数参数。它使音乐从 0 音量开始,并在给定时间逐渐变到最大音量。
- pygame.mixer.music.queue():这会将歌曲排在当前音乐文件的末尾。当前文件一结束,下一个排队的音乐文件就会播放。您还可以将多首歌曲排队,这将是我们构建播放列表的主要逻辑。
- pygame.mixer.music.rewind():将当前音乐文件的播放倒回到开头。
- pygame.mixer.music.pause():暂停当前音乐文件的播放。
- pygame.mixer.music.set_endevent():这会发送一个信号,即一个事件。如果音乐文件播放完毕,则将有一个事件排队。
- pygame.mixer.music.get_busy():返回一个布尔值,指示当前是否已播放音乐文件。
在 Pygame 中添加播放列表
为了在 Pygame 中创建播放列表,我们将使用上述所有方法来形成一个流程,在该流程中,我们选择的所有音乐文件都将被推送到列表中,并且这些文件中的每一个都将排队并依次播放顺序。这个逻辑可以实现如下:
- 使用pygame.mixer.music.load()将包含音乐文件的列表的第一个条目加载到 pygame 中,同时从列表中删除第一个条目。
- 在加载第一首歌曲时,我们将使用pygame.mixer.music.play()播放它。
- 随后,我们还将使用pygame.mixer.music.queue()对第二个条目进行排队,并将其从我们的列表中删除。
- 每当音乐结束时,我们将通过使用pygame.mixer.music.set_endevent()来举办一个事件pygame.MUSIC_END来通知玩家从列表中排队下一首歌曲。
- 一旦我们播放列表中的所有音乐文件都已播放/排队,则pygame.mixer.music.get_busy()返回 false 并且我们中断 for 循环和 while 循环使我们的程序结束。
下面是实现:
Python
import pygame
# setting up pygame
pygame.init()
def insert_into_playlist(playlist, music_file):
# Adding songs file in our playlist
playlist.append(music_file)
def start_playlist(playList):
# Loading first audio file into our player
pygame.mixer.music.load(playList[0])
# Removing the loaded song from our playlist list
playList.pop(0)
# Playing our music
pygame.mixer.music.play()
# Queueing next song into our player
pygame.mixer.music.queue(playList[0])
playList.pop(0)
# setting up an end event which host an event
# after the end of every song
pygame.mixer.music.set_endevent(pygame.MUSIC_END)
# Playing the songs in the background
running = True
while running:
# checking if any event has been
# hosted at time of playing
for event in pygame.event.get():
# A event will be hosted
# after the end of every song
if event.type == pygame.MUSIC_END:
print('Song Finished')
# Checking our playList
# that if any song exist or
# it is empty
if len(playList) > 0:
# if song available then load it in player
# and remove from the player
pygame.mixer.music.queue(playList[0])
playList.pop(0)
# Checking whether the
# player is still playing any song
# if yes it will return true and false otherwise
if not pygame.mixer.music.get_busy():
print("Playlist completed")
# When the playlist has
# completed playing successfully
# we'll go out of the
# while-loop by using break
running = False
break
if __name__ == '__main__':
# This list is going to be
# our playlist as we can
# only queue one song at a
# time by using `.queue()` method
# therefore we are using list
# and will queue song one by one.
playList = []
insert_into_playlist(playList, 'eg1.wav')
insert_into_playlist(playList, 'eg2.wav')
insert_into_playlist(playList, 'eg3.wav')
start_playlist(playList)
输出: