Pygame制作音乐播放器

使用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]))

function.py

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()

button.py

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

文件结构:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44132542/article/details/88073522