5.17每日总结

复制代码
import os
import sys
import pygame

class MusicPlayer:
    def __init__(self, music_folder):
        self.music_folder = music_folder
        self.music_list = []
        self.current_music_index = 0
        self.is_paused = False
        self.volume = 0.5
        self.search_str = ""

        # 初始化 Pygame Mixer
        pygame.mixer.pre_init(44100, -16, 2, 512)
        pygame.mixer.init()

        # 加载音乐列表
        self.load_music_list()

    def load_music_list(self):
        """
        加载音乐文件列表
        """
        self.music_list = []
        for file in os.listdir(self.music_folder):
            if file.endswith(".mp3"):
                filepath = os.path.join(self.music_folder, file)
                self.music_list.append(filepath)

    def play_music(self):
        """
        播放当前音乐
        """
        pygame.mixer.music.load(self.music_list[self.current_music_index])
        pygame.mixer.music.set_volume(self.volume)
        pygame.mixer.music.play()

    def pause_music(self):
        """
        暂停或恢复当前音乐
        """
        self.is_paused = not self.is_paused
        if self.is_paused:
            pygame.mixer.music.pause()
        else:
            pygame.mixer.music.unpause()

    def set_volume(self, volume):
        """
        调节音量
        """
        self.volume = volume
        pygame.mixer.music.set_volume(volume)

    def next_music(self):
        """
        播放下一首音乐
        """
        self.current_music_index = (self.current_music_index + 1) % len(self.music_list)
        self.play_music()

    def search_music(self, search_str):
        """
        搜索音乐并播放
        """
        match_list = []
        for i, filepath in enumerate(self.music_list):
            if search_str in os.path.basename(filepath):
                match_list.append(i)

        if not match_list:
            return False

        self.current_music_index = match_list[0]
        self.play_music()
        return True

class MusicPlayerWindow:
    def __init__(self, width, height, title, music_folder):
        self.width = width
        self.height = height
        self.title = title
        self.music_folder = music_folder

        # 创建 Pygame 窗口
        pygame.init()
        self.screen = pygame.display.set_mode((self.width, self.height))
        pygame.display.set_caption(self.title)

        # 加载字体
        self.font = pygame.font.SysFont("Arial", 18)

        # 创建音乐播放器
        self.music_player = MusicPlayer(self.music_folder)
        self.music_player.play_music()

    def draw(self):
        """
        绘制窗口内容
        """
        # 清空屏幕
        self.screen.fill((255, 255, 255))

        # 绘制音乐文件夹名称
        folder_text = self.font.render("Music Folder: " + self.music_folder, True, (0, 0, 0))
        self.screen.blit(folder_text, (20, 20))

        # 绘制当前音乐名称
        current_music_text = self.font.render("Now Playing: " + os.path.basename(self.music_player.music_list[self.music_player.current_music_index]), True, (0, 0, 0))
        self.screen.blit(current_music_text, (20, 60))

        # 绘制暂停/恢复按钮
        pause_text = "Pause" if not self.music_player.is_paused else "Resume"
        pause_button_text = self.font.render(pause_text, True, (0, 0, 0))
        pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 100, 80, 30))
        self.screen.blit(pause_button_text, (38, 108))

        # 绘制音量调节条
        volume_text = self.font.render("Volume: " + str(round(self.music_player.volume * 100)) + "%", True, (0, 0, 0))
        self.screen.blit(volume_text, (20, 150))
        pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 180, 200, 10))
        pygame.draw.rect(self.screen, (0, 0, 0), pygame.Rect(20, 180, int(200 * self.music_player.volume), 10))

        # 绘制下一首按钮
        next_button_text = self.font.render("Next", True, (0, 0, 0))
        pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 210, 80, 30))
        self.screen.blit(next_button_text, (38, 218))

        # 绘制搜索音乐输入框和按钮
        pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(20, 260, 200, 30))
        search_text = self.font.render(self.music_player.search_str, True, (0, 0, 0))
        self.screen.blit(search_text, (26, 266))
        search_button_text = self.font.render("Search", True, (0, 0, 0))
        pygame.draw.rect(self.screen, (200, 200, 200), pygame.Rect(230, 260, 80, 30))
        self.screen.blit(search_button_text, (248, 268))

        # 显示更新后的画面
        pygame.display.flip()

    def run(self):
        """
        运行主循环
        """
        while True:
            # 处理事件
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == pygame.MOUSEBUTTONUP:
                    # 暂停/恢复按钮点击事件
                    if pygame.Rect(20, 100, 80, 30).collidepoint(event.pos):
                        self.music_player.pause_music()
                    # 下一首按钮点击事件
                    elif pygame.Rect(20, 210, 80, 30).collidepoint(event.pos):
                        self.music_player.next_music()
                    # 搜索音乐按钮点击事件
                    elif pygame.Rect(230, 260, 80, 30).collidepoint(event.pos):
                        self.music_player.search_music(self.music_player.search_str)
                elif event.type == pygame.KEYDOWN:
                    # 监听搜索音乐输入框
                    if event.unicode.isalpha() or event.unicode.isdigit() or event.unicode == " ":
                        self.music_player.search_str += event.unicode
                    elif event.key == pygame.K_BACKSPACE:
                        self.music_player.search_str = self.music_player.search_str[:-1]
                    elif event.key == pygame.K_RETURN:
                        if self.music_player.search_str:
                            success = self.music_player.search_music(self.music_player.search_str)
                            if not success:
                                error_text = self.font.render("No matching music found!", True, (255, 0, 0))
                                self.screen.blit(error_text, (20, 300))
                                pygame.display.flip()
                                pygame.time.wait(1000)
                        self.music_player.search_str = ""
                elif event.type == pygame.MOUSEBUTTONDOWN:
                    # 监听音量调节条
                    if pygame.Rect(20, 180, 200, 10).collidepoint(event.pos):
                        click_pos = event.pos[0] - 20
                        self.music_player.set_volume(click_pos / 200)

            # 绘制窗口
            self.draw()

# 创建音乐播放器窗口实例
window = MusicPlayerWindow(640, 480, "Music Player", "Alimusic")

# 运行窗口主循环
window.run()
复制代码

 

posted @   漏网鲨鱼  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示