diff --git a/my_music.py b/my_music.py index 5dde097..4a392b9 100644 --- a/my_music.py +++ b/my_music.py @@ -12,9 +12,10 @@ stop_img = pygame.image.load('stop.png') # 暂停按钮 last_img = pygame.image.load('last.png') # 上一曲按钮 next_img = pygame.image.load('next.png') # 下一曲按钮 logo_img = pygame.image.load('logo.png') # 下一曲按钮 +my_font = pygame.font.Font("neuropol.ttf",18) music_list = [] -path = "C:\\Users\\bellcode\\Desktop\\test" +path = "E:\\music\\test" filelist = os.listdir(path) num = -1 for i in filelist: @@ -24,11 +25,13 @@ volume = 0.2 pygame.mixer.music.set_volume(volume) # 初始播放音量 click = 0 play_button = stop_img +angle = 0 while True: for event in pygame.event.get(): if event.type == locals.QUIT: exit() + # 按键,控制声音大小 if event.type == locals.KEYDOWN: if event.key == locals.K_w: @@ -45,7 +48,7 @@ while True: if event.type == locals.MOUSEBUTTONDOWN: if event.button == 1: # 左击 x, y = event.pos - if x > 270 and x < 370 and y > 350 and y < 450: # 播放按钮 + if x > 270 and x < 370 and y > 350 and y < 450: # 播放按钮 click += 1 if click % 2 == 0: play_button = stop_img @@ -53,10 +56,11 @@ while True: else: play_button = play_img pygame.mixer.music.pause() - if x > 420 and x < 520 and y > 350 and y < 400: # 下一曲 - num += 1 - if num > len(music_list) - 1: - num = 0 + + if x > 120 and x < 220 and y > 350 and y < 400: # 上一曲 + num -= 1 + if num < 0: + num = len(music_list) - 1 pygame.mixer.music.load(path + "\\" + music_list[num]) pygame.mixer.music.play() play_button = stop_img @@ -64,11 +68,15 @@ while True: click += 2 else: click += 1 + # 歌曲的时间 + music1 = pygame.mixer.Sound(path + "\\"+music_list[num]) + music_length = music1.get_length() + music_length = int(music_length) - if x > 120 and x < 220 and y > 350 and y < 400: # 上一曲 - num -= 1 - if num < 0: - num = len(music_list) - 1 + if x > 420 and x < 520 and y > 350 and y < 400: # 下一曲 + num += 1 + if num > len(music_list) - 1: + num = 0 pygame.mixer.music.load(path + "\\" + music_list[num]) pygame.mixer.music.play() play_button = stop_img @@ -76,19 +84,58 @@ while True: click += 2 else: click += 1 + # 歌曲的时间 + music1 = pygame.mixer.Sound(path + "\\"+music_list[num]) + music_length = music1.get_length() + music_length = int(music_length) + - if pygame.mixer.music.get_busy() == False: + if pygame.mixer.music.get_busy() == False: # 音乐是否在播放 num += 1 if num > len(music_list)-1: num = 0 - pygame.mixer.music.load(path + "\\" + music_list[num]) - pygame.mixer.music.play() + pygame.mixer.music.load(path + "\\" + music_list[num]) # 加载本地音乐需要路径加歌曲名 + pygame.mixer.music.play() # 播放音乐 + # 歌曲的时间 + music1 = pygame.mixer.Sound(path + "\\"+music_list[num]) + music_length = music1.get_length() + music_length = int(music_length) + + # 歌曲播放进度时间 + play_time = pygame.mixer.music.get_pos() + play_time = int(play_time/1000) + + play_m = play_time // 60 + play_s = play_time % 60 + if play_s < 10: + play_s = "0"+str(play_s) + info1 = str(play_m)+":"+str(play_s) + + # 歌曲的时间长度 + play_m = music_length // 60 + play_s = music_length % 60 + if play_s < 10: + play_s = "0"+str(play_s) + info2 = str(play_m)+":"+str(play_s) + + # 旋转后的唱盘图片 + new_logo = pygame.transform.rotate(logo_img,angle) # angle正数,逆时针,负数,顺时针 + newRect = new_logo.get_rect(center=(320,200)) # 移动new_logo的坐标,将它的中心点移到(x,y)的位置,并返回一个元组,四个参数 + pos = (newRect[0],newRect[1]) + #print(newRect) # 前两个参数是左上角的坐标位置,后面两个是图片的大小。 + if play_button == stop_img: + angle+=2 # 绘制画面 screen.blit(bg_img, (0, 0)) # 填充背景 screen.blit(play_button, (270, 330)) # 暂停按钮 - screen.blit(logo_img, (170, 60)) # 中间logo图 + screen.blit(new_logo, pos) # 中间logo图,渲染图片是根据左上角旋转,位置由中心点决定 screen.blit(last_img, (120, 350)) # 上一曲 screen.blit(next_img, (420, 350)) # 下一曲 + # 绘制时间进度 + text1 = my_font.render(info1,True,(225,250,215)) + screen.blit(text1,(120,440)) + text2 = my_font.render("/"+info2,True,(0,0,0)) + screen.blit(text2,(180,440)) # 刷新画面 pygame.display.update() \ No newline at end of file diff --git a/test.py b/test.py new file mode 100644 index 0000000..fb33470 --- /dev/null +++ b/test.py @@ -0,0 +1,80 @@ +import pygame +from pygame import locals +import os + +pygame.init() # 初始化 +# 创建窗口 +screen = pygame.display.set_mode((640, 480)) +# 载入图片、资源 +bg_img = pygame.image.load('background.png') # 背景图 +play_img = pygame.image.load('play.png') # 播放按钮 +stop_img = pygame.image.load('stop.png') # 暂停按钮 +last_img = pygame.image.load('last.png') # 上一曲按钮 +next_img = pygame.image.load('next.png') # 下一曲按钮 +logo_img = pygame.image.load('logo.png') # 中间logo + +#music_list = ['歌曲1.wav','歌曲2.wav','歌曲3.wav','歌曲4.ogg'] # 歌单列表 + +music_list = [] +path = r'C:\Users\WangTian\Desktop\test' # 路径 +filelist = os.listdir(path) # 以列表的形式返回当前文件下的所有目录 +for i in filelist: + if i[-4:] == '.wav' or i[-4:] == '.ogg': # 用切片找到满足条件的音频文件 + music_list.append(i) # 将需要的文件名添加到列表里 + +volume = 0.8 +pygame.mixer.music.set_volume(volume) # 初始播放音量 +click = 0 +play_button = stop_img +num = -1 + +while True: + for event in pygame.event.get(): + if event.type == locals.QUIT: + exit() + if event.type == locals.KEYDOWN: + if event.key == locals.K_UP: + volume += 0.1 + if volume>1: + volume = 1 + pygame.mixer.music.set_volume(volume) # 音乐播放器音量 + if event.key == locals.K_DOWN: + volume -= 0.1 + if volume<0: + volume = 0 + pygame.mixer.music.set_volume(volume) # 音乐播放器音量 + if event.type == locals.MOUSEBUTTONDOWN: # 鼠标点击事件 + if event.button == 1: + x,y = event.pos + if x > 270 and x < 370 and y >350 and y < 450: # 设置鼠标点击范围 + click += 1 + if click % 2 == 0: + pygame.mixer.music.unpause() + play_button = stop_img # 点击可暂停图片 + else: + pygame.mixer.music.pause() + play_button = play_img # 点击可播放图片 + if x > 120 and x < 220 and y > 350 and y < 400: + num -= 1 + if num < 0: + num = len(music_list)-1 + pygame.mixer.music.load(path+'\\'+music_list[num]) # 加载音频文件,如果是本地文件夹就要添加上路径。 + pygame.mixer.music.play() # 播放音乐 + click = 0 + play_button = stop_img + + if pygame.mixer.music.get_busy() == False: # 布尔值检测音乐是否在播放 + num += 1 + if num > len(filelist)-1: + num = 0 + pygame.mixer.music.load(path+'\\'+music_list[num]) # 加载音频文件,如果是本地文件夹就要添加上路径。 + pygame.mixer.music.play() # 播放音乐 + + # 绘制画面 + screen.blit(bg_img, (0, 0)) # 填充背景 + screen.blit(play_button, (270, 330)) # 暂停按钮 + screen.blit(logo_img, (170, 60)) # 中间logo图 + screen.blit(last_img, (120, 350)) # 上一曲 + screen.blit(next_img, (420, 350)) # 下一曲 + # 刷新画面 + pygame.display.update() \ No newline at end of file