1、准备工作
ide:pycharm
python:3.7
三方包:pygame、pyinstaller、mutagen
几首mp3格式的歌
2、开始
2.1 设计说明
1、包含 上一首、下一首、暂停/播放、快进/快退、显示当前播放的歌曲名称、显示播放进度条
2、使用pygame.mixer
3、随机播放磁盘某个目录及其子目录下的mp3文件
4、上一首、下一首用随机选择choice(list) 实现
5、进度条用按照一定速度移动进度图片来实现,过程中处理暂停、快进
6、歌曲快进播放用pygame.mixer.music.play(0,d_song_time) 实现
7、暂停用pygame.mixer.music.pause() 实现
8、播放用pygame.mixer.music.unpause() 实现
9、用mutagen.mp3来获取mp3信息
2.2 代码逻辑
收集某个目录下的所有mp3
# 收集某个目录及子目录下的MP3格式的文件 # 返回歌曲路径、歌曲时长 # [['E:\\musics\\Mirror_Yohee_128K.mp3', 236], ['E:\\musics\\over here_Nobigdyl_128K.mp3', 188], ['E:\\musics\\尘_薛之谦_128K.mp3', 282], ['E:\\musics\\aaa\\尘_薛之谦_128K.mp3', 282]] def collect_songs(fidir): musics =[] for root, dirs, files in os.walk(fidir): for file in files: tmp =[] if file.endswith('mp3'): file = os.path.join(root,file) song = MP3(file) duration = round(song.info.length) tmp.append(file) tmp.append(duration) musics.append(tmp) return musics
显示歌曲名称
# 把歌曲名字显示在播放器上 def draw_song_name(music): # 取歌曲名 music_name = music[0].split("\\")[-1] # print(music_name) wbk_obj = font_obj.render(music_name, True, (0, 255, 255)) k_obj = wbk_obj.get_rect() k_obj.center = (340, 200) screen.blit(wbk_obj, k_obj) pygame.display.update()
播放歌曲
# 随机播放一首歌 def sing_a_song(musics): # 随机选择一首音乐 music = choice(musics) print(type(musics)) pygame.mixer.music.load(music[0]) pygame.mixer.music.play() print('开始播放:%s -- %s秒'%(music[0] , str(music[1]))) return music
显示播放进度
# 播放进度显示 def move(current_time,start_time,pause_duration_time,c_music): if pause_end_time == 0 and pause_start_time != 0: duration_time = round(pause_start_time - start_time - pause_duration_time) else: duration_time = round(current_time - start_time - pause_duration_time) song_total_time = c_music[1] speed = (end_x-begin_x)/song_total_time current_x = begin_x + duration_time*speed try: screen.blit(dian,(current_x,148)) pygame.display.update() except: print(current_time) print(start_time) print(pause_duration_time) exit()
快进快退功能
# 快进快退功能 def kuaijin(jindu_x,c_music): # 要跳转到的距离d_x d_x = jindu_x - begin_x song_total_time = c_music[1] # 要跳转到的时间d_song_time d_song_time = round(song_total_time*(d_x/560),1) # 将歌曲快进到d_song_time pygame.mixer.music.play(0,d_song_time)