使用pygame制作的包含基本功能和画面效果的简单音乐播放器
实现如下功能:
- 基本音乐播放器功能:播放,暂停,继续播放,上一曲,下一曲,可以在图形界面或键盘操作
(播放:小键盘回车, 暂停:p, 继续播放:空格, 上一曲:方向键←, 下一曲:方向键→) - 音量调节:按键:↑ ↓
- 界面实现简单动画
运行截图
ps:暂停之后点击中间圆盘是继续播放,我偷了点懒
代码如下
Music_Payer.py
import pygame
import Load_Music
import function
from button import Button
def player_run():
pygame.init()
screen = pygame.display.set_mode((630, 892))
pygame.display.set_caption("Music Player")
background=pygame.image.load(r"./img/bg.jpg")
screen.blit(background,(0,0))
music_num = [1]
volume = [1]
Music_list = Load_Music.Music_List().get_play_list()
Load_Music.load_music(Music_list[music_num[0]])
pygame.time.Clock().tick(30)#限制30帧
play_bt = Button(screen=screen, add="./img/play.png", name="play_music", place=[250, 600])
next_bt = Button(screen=screen, add="./img/next.png", name="next_music", place=[400, 600])
previous_bt = Button(screen=screen, add="./img/previous.png", name="previous_music", place=[100, 600])
pause_bt = Button(screen=screen, add="./img/pause.png", name="pause_music", place=[250, 450])
show_bt = Button(screen=screen, add="./img/show.png", name="show_music", place=[150, 100])
while True:
get_mouse = function.check_events(music_num, volume, Music_list)
function.get_click(get_mouse, play_bt, pause_bt, next_bt, previous_bt, show_bt, music_num, Music_list)
show_bt.show_button()
play_bt.show_button()
next_bt.show_button()
previous_bt.show_button()
pause_bt.show_button()
if pygame.mixer.music.get_busy() == True:#音乐播放图片开始转动
show_bt.ro_img()
pygame.display.flip()
player_run()
Load_Music.py
import pygame
import os
class Music_List():
def __init__(self):
# 播放列表
self.play_list = []
# 默认文件夹
self.file_dir = 'music'
def get_play_list(self):
# 开始遍历目录
for root, dirs, files in os.walk(self.file_dir):
for file in files:
if '.mp3' in file:
self.play_list.append(self.file_dir + "/" + file)
return self.play_list
def load_music(titlt):#加载音乐
try:
pygame.mixer.music.load(titlt)
except :
pass
def play_music():
pygame.mixer.music.play()
def stop_music():
pygame.mixer.music.stop()
def pause_music():
"""暂停音乐"""
pygame.mixer.music.pause()
def unpause_music():
"""解除暂停"""
pygame.mixer.music.unpause()
def next_music(music_num, Music_list):
#下一曲.
music_num[0] += 1
load_music(Music_list[music_num[0]])
play_music()
def previous_music(music_num, Music_list):
#上一曲
music_num[0] -= 1
load_music(Music_list[music_num[0]])
play_music()
def volume_music(volume):
#调节音量
pygame.mixer.music.set_volume(volume[0])
print("音量:"+str(100*volume[0]))
import pygame
import Load_Music
import sys
from button import Button
def check_events(music_num, volume, Music_List):
"""响应按键"""
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
Load_Music.next_music(music_num, Music_List)
if event.key == pygame.K_LEFT:
Load_Music.previous_music(music_num, Music_List)
if event.key == pygame.K_p:
Load_Music.pause_music()
if event.key == pygame.K_SPACE:
Load_Music.unpause_music()
if event.key == pygame.K_KP_ENTER:
Load_Music.load_music(str(music_num[0])+".mp3")
Load_Music.play_music()
if event.key == pygame.K_UP:
volume[0] += 0.1
Load_Music.volume_music(volume)
if event.key == pygame.K_DOWN:
volume[0] -= 0.1
Load_Music.volume_music(volume)
if event.type == pygame.MOUSEBUTTONDOWN:
mouse_x, mouse_y = pygame.mouse.get_pos()
mouse = [mouse_x, mouse_y]
return mouse
def get_click(get_mouse, play_bt, pause_bt, next_bt, previous_bt, show_bt, music_num, Music_list):
if get_mouse != None :
mouse = get_mouse
if play_bt.click_button(mouse[0], mouse[1]) == True:
Load_Music.play_music()
elif pause_bt.click_button(mouse[0], mouse[1]) == True:
Load_Music.pause_music()
elif next_bt.click_button(mouse[0], mouse[1]) == True:
Load_Music.next_music(music_num, Music_list)
elif previous_bt.click_button(mouse[0], mouse[1]) == True:
Load_Music.previous_music(music_num, Music_list)
elif show_bt.click_button(mouse[0], mouse[1]) == True:
Load_Music.unpause_music()
import pygame
class Button():
def __init__(self, screen, add, name, place):
self.screen = screen
self.add = add#路径
self.name = name#按钮功能
self.place = place#按钮绘制位置
self.mybt = pygame.image.load(r''+self.add)#图片地址
self.rect = self.mybt.get_rect()#获取图案矩形
self.angle = 1#图像旋转角度
def click_button(self,mouse_x,mouse_y):
"""判定点击按钮"""
if (mouse_x > self.place[0] and mouse_x < self.rect.width+(self.place[0])
and mouse_y > self.place[1] and mouse_y < self.rect.height+(self.place[1])):
return True
def show_button(self):
"""显示按钮"""
self.screen.blit(self.mybt, self.place)
def ro_img(self):#旋转图像
newimg = pygame.transform.rotozoom(self.mybt, self.angle, 1.0)
newrect = newimg.get_rect(center=(300,248))#固定图像中心
self.screen.blit(newimg, newrect)
self.angle += 1