pygam第5课——自制音乐播放器

前言:前几节课我们已经学会了很多知识点,欢迎大家可以去考古一下

在这里插入图片描述

今天我们将学习加载音乐,并且自制一个音乐播放器,界面功能包括:

  • 加载背景封面
  • 上一首
  • 开始\暂停
  • 下一首
  • 重播
  • 随机播放
  • 快进

效果展示(GIF所以你们听不到声音)

请添加图片描述

分析

  • 加载音乐

pygame.mixer.music.load(song) # 加载音乐
pygame.mixer.music.set_volume(0.5) # 设置播放器音量,参数:0-1,切记写小一点,以免声音过大
  • 播放

'''
第一个参数1指播放一次,0指循环播放
time:指从第几毫秒开始播放
 pygame.mixer.music.play(1, time)
'''
pygame.mixer.music.play() # 播放
  • 暂停

pygame.mixer.music.pause()
  • 恢复播放

pygame.mixer.music.unpause()
  • 快进

'''
第一个参数1指播放一次,0指循环播放
time:指从第几毫秒开始播放
 pygame.mixer.music.play(1, time)
'''
 pygame.mixer.music.play(1, time)
  • 随机播放

    • randon.randint(音乐数量)

注意事项及解决

  • 1,开始与暂定按钮的图标在同一个位置,设置变量来回切换

  • 2、当前播放第一首歌,点击上一首应切换最后一首;播放至最后一首,点击下一首,应切换第一首

  • 3、音乐每播放完一首,应自动跳转至下一首

素材获取(功能图标、音乐封面,音乐只能自己下载啦):点我

目录结构

文件\文件夹名 作用
image2 播放器界面的功能图标图片存放
music 存放音乐
封面 存放音乐封面

在这里插入图片描述

完整版代码:

import os

import pygame, random, sys, time

pygame.init()
# 创建窗口
sc = pygame.display.set_mode((300, 250))
# 载入图片
bg = pygame.image.load("image2/bg.png")  # 背景
pre_song = pygame.image.load("image2/上一首.png")  # 上一曲
start = pygame.image.load("image2/播放.png")  # 播放
pause = pygame.image.load("image2/暂停.png")  # 暂停
next_song = pygame.image.load("image2/下一首.png")  # 下一曲
ff = pygame.image.load("image2/快进.png")  # 快进
res = pygame.image.load("image2/重播.png")  # 重播
rand = pygame.image.load("image2/随机播放.png")  # 随机
# 加载音乐播放图片
bg_list = os.listdir("./封面/")

bg_list1 = []
for bg in bg_list:
    bg_list1.append(pygame.image.load("./封面/"+bg))

# 初始按钮为“开始”状态
btn = start
# 设置btn_flag,控制暂停/开始按钮的形态
btn_flag = 0
# 9把歌曲名字保存在列表,客户端加密后的名字很长,最好把每首歌名换行并对齐,方便查阅
song_list = ['./music/'+i for i in os.listdir('./music/')]

# 载入音乐
index = 0
song = song_list[index]
pygame.mixer.music.load(song)
# 控制音量,取值范围为0-1.0的浮点数。0为最小值,1为最大值。
pygame.mixer.music.set_volume(0.5)
# 播放第一首音乐,此处提醒学生,调小电脑音量,防止声音突然太大伤害听力
pygame.mixer.music.play()
time = 0
print(time)
length = len(song_list)
while True:  # 加上循环,引出事件

    # 如果是偶数,按钮切换为“start”,如果时奇数,切换为“stop”。
    if btn_flag % 2 == 0:
        btn = start
        # 音乐的暂停
        pygame.mixer.music.pause()
    else:
        btn = pause
        # 音乐的开始
        pygame.mixer.music.unpause()
    # 绘制背景,按钮
    sc.blit(bg_list1[index],(0,0)) # 绘制当前播放音乐的背景图片
    sc.blit(pre_song, (20, 90))
    sc.blit(next_song, (210, 90))
    sc.blit(rand, (115, 170))
    sc.blit(btn, (115, 90))
    sc.blit(ff, (210, 170))
    sc.blit(res, (20, 170))
    pygame.display.update()
    # 获取事件列表
    for event in pygame.event.get():
        mouse_x, mouse_y = pygame.mouse.get_pos()
        if event.type == pygame.QUIT:
            pygame.quit()  # 退出窗口
            sys.exit()  # 退出程序
        if event.type == pygame.MOUSEBUTTONDOWN:
            # 点击了暂停按键后的效果
            if 115 < mouse_x < 185 and 90 < mouse_y < 160:
                btn_flag += 1
            # 1. 点击下一曲按钮,切换为下一首音乐
            if 210 < mouse_x < 280 and 90 < mouse_y < 160:
                # index+=1 #简单尝试,多点几次下一曲,发现列表索引超限。
                index = (index + 1) % len(song_list)  # 实现音乐的轮播
                song = song_list[index]
                pygame.mixer.music.load(song)
                pygame.mixer.music.play(1, 0)
            # 1. 点击上一曲按钮,切换为上一首音乐
            if 20 < mouse_x < 90 and 90 < mouse_y < 160:
                # index+=1 #简单尝试,多点几次下一曲,发现列表索引超限。

                index = (index + length - 1) % length  # 实现音乐的轮播
                song = song_list[index]
                pygame.mixer.music.load(song)
                pygame.mixer.music.play(1, 0)
            # 2. 点击了快进后的效果
            elif 210 < mouse_x < 280 and 170 < mouse_y < 240:
                # 获取播放时间并转换成秒为单位
                # 时间自加
                time += 10
                print(time)
                pygame.mixer.music.play(1, time)
                print(time)
                # 知识进阶
                if pygame.mixer.music.get_busy() == False:
                    # 获取新的下标
                    index = (index + 1) % length
                    # 播放新的音乐
                    song = song_list[index]
                    pygame.mixer.music.load(song)
                    pygame.mixer.music.play()

            # 3. 点击了重新播放后的效果
            elif 20 < mouse_x < 90 and 170 < mouse_y < 240:
                time = 0
                pygame.mixer.music.play(1, time)

            # 4. 点击了随机后的效果
            elif 115 < mouse_x < 185 and 170 < mouse_y < 240:
                # 获取新的下标
                index = random.randint(0, 3)
                # 播放新的音乐
                song = song_list[index]
                pygame.mixer.music.load(song)
                pygame.mixer.music.play()


希望对大家有帮助

致力于办公自动化的小小程序员一枚#

都看到这了,关注+点赞+收藏=不迷路!!

如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!

猜你喜欢

转载自blog.csdn.net/weixin_42636075/article/details/130811078
今日推荐