百度随身听音乐播放器百度随身听音乐播放器
解释:pygame+music
之前发布了自己写的小程序:百度随心听音乐播放器的一些效果图
你可以去到这里再次看看效果:
pygame系列_百度随心听_完美的UI设计
这个程序的灵感来自于百度随心听
说明:
动作按钮全部是画出来的,没有用到任何图片
用到图片的只有:背景,歌手图片,作者图片
经过一个阶段的调试,现在算是可以拿上台面和大家交流
功能介绍:
A.四个按钮介绍
1.完成停止,播放音乐功能
2.喜欢/不喜欢当前所播放的音乐
3.删除当前所播放的音乐(物理环境下不会删除,删除的是内存中的)
4.下一曲
5.当鼠标经过按钮的时候,按钮颜色会变化
B.状态栏(最下面)
1.显示所有歌曲数(AllSongs)
2.当前播放的歌曲是第只歌曲
3.当前音量(范围:0 - 10)
4.音量的图形显示(这里没有用到图片,而是系统画出来的:-))
5.我的邮箱信息:hongtenzone@foxmail.com

C.右下角
1.当鼠标移动到圆区域,会展示出我的相片和'Yes,You are Luck:)'字样
鼠标一开的时候会自动隐藏(我想接触过android系统手机的的朋友,可能有这样的经历,在工具里面有一个地方
当点击三下的时候,会出现android里面的一副图片....对我这里的灵感来自于这里ll)
=======================================
下面我说说我做的思路吧
我想有一部分朋友会喜欢的...:)
首先,主题功能是音乐播放,那么我们就应该实现这个音乐播放的功能
哈哈,这个灵感来自于我之前写的小游戏:
pygame系列_小球完全弹性碰撞游戏_源码下载
在这个游戏中,我实现了音乐的播放,于是乎我就想在音乐播放上面做一些文章...
接下来是程序PyMusic的主题界面需要考虑,我个人喜欢听歌...百度音乐,百度随心听都是常去的地方..
百度随心听的界面设计简洁,很适合我的风格...所以我选择了百度随心听..
于是乎我看是看百度随心听的代码...一不小心被我大概看明白了按钮之间的逻辑....
一时间,头脑中出现了PyMusic的原型....
为什么不做一个呢?我就这样问着我自己,慢慢在脑海中呈现PyMusic的原型...
然后开始动笔,把pyMusic的原型在纸上画了出来....
画好了,就开始分析...(这个过程有一点长..)
然后把原型中的物体(按钮,图片加载..)一个一个的实现..
最后加上我的小自信..呵呵,成啦..
=======================================
一些细节
在做PyMusic的过程中,需要注意一些细节的地方
我下面把这些地方罗列出来

1.音量图形的初始化
1 VOLUME_POINTS = []2 VOLUME_POINTS_START = []3 VOLUME_RECT_COLORS = []4 for p in range(170, 250, 7):5 VOLUME_POINTS.append([SCREEN_W - p,SCREEN_H + 20])6 for ps in range(175, 250, 7):7 VOLUME_POINTS_START.append([SCREEN_W - ps, SCREEN_H])8 VOLUME_RECT_COLORS.append((randint(0, 255), randint(0, 255), randint(0, 255)))
2.加载歌曲和图片
1 SONG_ARRAY = []2 SONG_IMAGE = []3 for song in range(len(SONGS)):4 SONG_ARRAY.append(pygame.mixer.Sound(os.path.join(DATA_DIR, SOUND_DIR, SONGS[song][0])))5 SONG_IMAGE.append(pygame.image.load(os.path.join(DATA_DIR, IMAGE_DIR, SONGS[song][3])).convert())
3.字体加载
1 font = pygame.font.Font(os.path.join(DATA_DIR, FONT_DIR, 'TORK____.ttf'), 14)2 font_song_title = pygame.font.Font(os.path.join(DATA_DIR, FONT_DIR, 'msyhbd.ttf'), 24)3 font_song = pygame.font.Font(os.path.join(DATA_DIR, FONT_DIR, 'msyh.ttf'), 16)
4.停止/播放按钮
1 def button_play(screen, color): 2 pygame.draw.circle(screen, color, CIRCLES_POS[0], CIRCLR_R, CIRCLR_W) 3 points=[(77,340),(77,360),(95,350)] 4 pygame.draw.polygon(screen,color,points) 5 6 def button_stop(screen, color): 7 pygame.draw.circle(screen, color, CIRCLES_POS[0], CIRCLR_R, CIRCLR_W) 8 pygame.draw.rect(screen, 9 color,10 Rect(77, 340, 5, 23 ))11 pygame.draw.rect(screen,12 color,13 Rect(88, 340, 5, 23 ))
5.删除歌曲按钮
1 def button_del(screen, color): 2 pygame.draw.circle(screen, color, CIRCLES_POS[2], CIRCLR_R, CIRCLR_W) 3 pygame.draw.circle(screen, color, (215, 340), 6, 3) 4 pygame.draw.rect(screen, 5 color, 6 Rect(200, 340, 30, 6 )) 7 pygame.draw.rect(screen, 8 color, 9 Rect(204, 340, 3, 20 ))10 pygame.draw.rect(screen,11 color,12 Rect(210, 340, 3, 20 ))13 pygame.draw.rect(screen,14 color,15 Rect(217, 340, 3, 20 ))16 pygame.draw.rect(screen,17 color,18 Rect(223, 340, 3, 20 ))19 pygame.draw.rect(screen,20 color,21 Rect(204, 360, 22, 5 ))
6.作者信息展示
1 def button_authon_image(screen, color):2 pygame.draw.circle(screen, color, CIRCLES_POS[4], CIRCLR_R, CIRCLR_W)3 pygame.draw.rect(screen,4 (255, 255, 255),5 Rect(418, 248, 144, 154 ))6 screen.blit(author_image, (420, 250))7 luck = font_song_title.render('Yes, You are Luck :-)', True, (255,165,10))8 screen.blit(luck, (280, 416))
7.第一个器
1 def listener(): 2 global PLAY_FLAG 3 global PREFER_FLAG 4 x, y = pygame.mouse.get_pos() 5 color = (255,255,25) 6 color_red = (230, 0, 0) 7 for index in range(len(CIRCLES_POS)): 8 p_x = (CIRCLES_POS[index][0] - x)**2 9 p_y = (CIRCLES_POS[index][1] - y)**210 p_r = (CIRCLR_R)**211 if (p_x + p_y <= p_r):12 if index == 0 and PLAY_FLAG:13 button_stop(screen, color)14 elif index == 0 and not PLAY_FLAG:15 button_play(screen, color)16 elif index == 1 and PREFER_FLAG:17 button_perfer(screen, color)18 elif index == 1 and not PREFER_FLAG:19 button_perfer(screen, color_red)20 elif index == 2:21 button_del(screen, color)22 elif index == 3:23 button_next_song(screen, color)24 elif index == 4:25 button_authon_image(screen, color)
8.第二个器
1 def mouse_down_listener(sound): 2 global PLAY_FLAG 3 global PREFER_FLAG 4 global SONG_FLAG 5 x, y = pygame.mouse.get_pos() 6 for index in range(len(CIRCLES_POS)): 7 p_x = (CIRCLES_POS[index][0] - x)**2 8 p_y = (CIRCLES_POS[index][1] - y)**2 9 p_r = (CIRCLR_R)**210 if (p_x + p_y <= p_r):11 if index == 0 and PLAY_FLAG:12 #print('stop now......')13 sound.stop()14 PLAY_FLAG = False15 elif index == 0 and not PLAY_FLAG:16 #print('play now ... ... ... ...')17 sound.play(0)18 PLAY_FLAG = True19 elif index == 1 and PREFER_FLAG:20 print('perfer song....<<', SONGS[SONG_FLAG][1], '>>')21 PREFER_FLAG = False22 elif index == 1 and not PREFER_FLAG:23 print('not perfer song... <<', SONGS[SONG_FLAG][1], '>>')24 PREFER_FLAG = True25 elif index == 2:26 sound.stop()27 print('delete song....<<', SONGS[SONG_FLAG][1], '>>')28 if SONG_FLAG > 0:29 SONGS.pop(SONG_FLAG)30 SONG_IMAGE.pop(SONG_FLAG)31 SONG_ARRAY.pop(SONG_FLAG)32 if SONG_FLAG >= len(SONGS) - 1:33 SONG_FLAG -= 134 else:35 print('This is the last song.')36 elif index == 3:37 sound.stop()38 if SONG_FLAG < len(SONGS) - 1:39 SONG_FLAG += 140 else:41 SONG_FLAG = 042 #print('next song....')43
9.鼠标按下事件
1 elif event.type == MOUSEBUTTONDOWN:2 pressed_array = pygame.mouse.get_pressed()3 for index in range(len(pressed_array)):4 if pressed_array[index]:5 if index == 0: #When the LEFT button down6 mouse_down_listener(bg_sound)
上面的都是一些细节的地方...
=======================================
下面是完整代码部分:
=======================================
1 #pygame music 2 3 import os, pygame 4 from pygame.locals import * 5 from sys import exit 6 from random import * 7 8 __des__ = ''' 9 Name: 10 PyMusic 11 ''' 12 __version__ = '2.0' 13 __author__ = {'name' : 'Hongten', 14 'mail' : 'hongtenzone@foxmail.com', 15 'blog' : 'http://.cnblogs.com/hongten', 16 'version' : __version__} 17 18 if not pygame.mixer: print('Warning, sound disabled!') 19 if not pygame.font: print('Warning, fonts disabled!') 20 21 pygame.init() 22 23 SCREEN_W = 580 24 SCREEN_H = 450 25 SCREEN_DEFAULT_SIZE = (SCREEN_W, SCREEN_H + 20) 26 VOLUME = 5 27 IMAGE_START_POS = (60, 60) 28 IMAGE_END_POS = (245, 245) 29 CIRCLES_POS = [(85, 350), (150, 350), (215, 350), (280, 350), (555, 425)] 30 CIRCLR_R = 25 31 CIRCLR_W = 3 32 33 PLAY_FLAG = True 34 PREFER_FLAG = True 35 36 37 DATA_DIR = 'data' 38 IMAGE_DIR = 'image' 39 BG_IMAGE_DIR = 'image//background' 40 FONT_DIR = 'font' 41 SOUND_DIR = 'sound' 42 43 BG_IMAGE = 'bg.jpg' 44 AUTHOR_IMAGE = 'author.png' 45 #size:(240*240) 46 BGS = [] 47 SONG_FLAG = 0 48 SONGS = [('1.OGG', 'You Raise Me Up', 'WestLife', '1.png'), 49 ('2.OGG', '不完整的旋律', '王力宏', '2.png'), 50 ('3.OGG', 'A Place Nearby' , 'Lene Marlin', '3.png'), 51 ('4.OGG', 'Just Give Me A Reason' , 'Pink', '4.png'), 52 ('5.OGG', '我 ' , '张国荣', '5.png'), 53 ('6.OGG', '大城小爱' , '王力宏', '6.png'), 54 ('7.OGG', '聊天' , '郭静', '7.png')] 55 westlift = 'westlife.png' 56 57 VOLUME_POINTS = [] 58 VOLUME_POINTS_START = [] 59 VOLUME_RECT_COLORS = [] 60 for p in range(170, 250, 7): 61 VOLUME_POINTS.append([SCREEN_W - p,SCREEN_H + 20]) 62 for ps in range(175, 250, 7): 63 VOLUME_POINTS_START.append([SCREEN_W - ps, SCREEN_H]) 64 VOLUME_RECT_COLORS.append((randint(0, 255), randint(0, 255), randint(0, 255))) 65 66 screen = pygame.display.set_mode(SCREEN_DEFAULT_SIZE, 0, 32) 67 bg = pygame.image.load(os.path.join(DATA_DIR, BG_IMAGE_DIR, BG_IMAGE)).convert() 68 author_image = pygame.image.load(os.path.join(DATA_DIR, IMAGE_DIR, AUTHOR_IMAGE)).convert() 69 70 SONG_ARRAY = [] 71 SONG_IMAGE = [] 72 for song in range(len(SONGS)): 73 SONG_ARRAY.append(pygame.mixer.Sound(os.path.join(DATA_DIR, SOUND_DIR, SONGS[song][0]))) 74 SONG_IMAGE.append(pygame.image.load(os.path.join(DATA_DIR, IMAGE_DIR, SONGS[song][3])).convert()) 75 76 font = pygame.font.Font(os.path.join(DATA_DIR, FONT_DIR, 'TORK____.ttf'), 14) 77 font_song_title = pygame.font.Font(os.path.join(DATA_DIR, FONT_DIR, 'msyhbd.ttf'), 24) 78 font_song = pygame.font.Font(os.path.join(DATA_DIR, FONT_DIR, 'msyh.ttf'), 16) 79 80 def draw_picture_rect(): 81 #picture rect 82 pygame.draw.rect(screen, 83 (255, 255, 255), 84 Rect(IMAGE_START_POS, IMAGE_END_POS)) 85 86 def button_play(screen, color): 87 pygame.draw.circle(screen, color, CIRCLES_POS[0], CIRCLR_R, CIRCLR_W) 88 points=[(77,340),(77,360),(95,350)] 89 pygame.draw.polygon(screen,color,points) 90 91 def button_stop(screen, color): 92 pygame.draw.circle(screen, color, CIRCLES_POS[0], CIRCLR_R, CIRCLR_W) 93 pygame.draw.rect(screen, 94 color, 95 Rect(77, 340, 5, 23 )) 96 pygame.draw.rect(screen, 97 color, 98 Rect(88, 340, 5, 23 )) 99 100 def button_perfer(screen, color):101 pygame.draw.circle(screen, color, CIRCLES_POS[1], CIRCLR_R, CIRCLR_W)102 points=[(138,340),(162,340),(150,363)]103 pygame.draw.polygon(screen,color,points)104 105 def button_del(screen, color):106 pygame.draw.circle(screen, color, CIRCLES_POS[2], CIRCLR_R, CIRCLR_W)107 pygame.draw.circle(screen, color, (215, 340), 6, 3)108 pygame.draw.rect(screen,109 color,110 Rect(200, 340, 30, 6 ))111 pygame.draw.rect(screen,112 color,113 Rect(204, 340, 3, 20 ))114 pygame.draw.rect(screen,115 color,116 Rect(210, 340, 3, 20 ))117 pygame.draw.rect(screen,118 color,119 Rect(217, 340, 3, 20 ))120 pygame.draw.rect(screen,121 color,122 Rect(223, 340, 3, 20 ))123 pygame.draw.rect(screen,124 color,125 Rect(204, 360, 22, 5 ))126 127 def button_next_song(screen, color):128 pygame.draw.circle(screen, color, CIRCLES_POS[3], CIRCLR_R, CIRCLR_W)129 points_one =[(270,343),(270,357),(277,350)]130 points_two =[(277,343),(277,357),(284,350)]131 pygame.draw.polygon(screen,color,points_one)132 pygame.draw.polygon(screen,color,points_two)133 pygame.draw.rect(screen,134 color,135 Rect(284, 343, 5, 15 ))136 137 def button_authon_image(screen, color):138 pygame.draw.circle(screen, color, CIRCLES_POS[4], CIRCLR_R, CIRCLR_W)139 pygame.draw.rect(screen,140 (255, 255, 255),141 Rect(418, 248, 144, 154 ))142 screen.blit(author_image, (420, 250))143 luck = font_song_title.render('Yes, You are Luck :-)', True, (255,165,10))144 screen.blit(luck, (280, 416))145 146 def listener():147 global PLAY_FLAG148 global PREFER_FLAG149 x, y = pygame.mouse.get_pos()150 color = (255,255,25)151 color_red = (230, 0, 0)152 for index in range(len(CIRCLES_POS)):153 p_x = (CIRCLES_POS[index][0] - x)**2154 p_y = (CIRCLES_POS[index][1] - y)**2155 p_r = (CIRCLR_R)**2156 if (p_x + p_y <= p_r):157 if index == 0 and PLAY_FLAG:158 button_stop(screen, color)159 elif index == 0 and not PLAY_FLAG:160 button_play(screen, color)161 elif index == 1 and PREFER_FLAG:162 button_perfer(screen, color)163 elif index == 1 and not PREFER_FLAG:164 button_perfer(screen, color_red)165 elif index == 2:166 button_del(screen, color)167 elif index == 3:168 button_next_song(screen, color)169 elif index == 4:170 button_authon_image(screen, color)171 172 def mouse_down_listener(sound):173 global PLAY_FLAG174 global PREFER_FLAG175 global SONG_FLAG176 x, y = pygame.mouse.get_pos()177 for index in range(len(CIRCLES_POS)):178 p_x = (CIRCLES_POS[index][0] - x)**2179 p_y = (CIRCLES_POS[index][1] - y)**2180 p_r = (CIRCLR_R)**2181 if (p_x + p_y <= p_r):182 if index == 0 and PLAY_FLAG:183 #print('stop now......')184 sound.stop()185 PLAY_FLAG = False186 elif index == 0 and not PLAY_FLAG:187 #print('play now ... ... ... ...')188 sound.play(0)189 PLAY_FLAG = True190 elif index == 1 and PREFER_FLAG:191 print('perfer song....<<', SONGS[SONG_FLAG][1], '>>')192 PREFER_FLAG = False193 elif index == 1 and not PREFER_FLAG:194 print('not perfer song... <<', SONGS[SONG_FLAG][1], '>>')195 PREFER_FLAG = True196 elif index == 2:197 sound.stop()198 print('delete song....<<', SONGS[SONG_FLAG][1], '>>')199 if SONG_FLAG > 0:200 SONGS.pop(SONG_FLAG)201 SONG_IMAGE.pop(SONG_FLAG)202 SONG_ARRAY.pop(SONG_FLAG)203 if SONG_FLAG >= len(SONGS) - 1:204 SONG_FLAG -= 1205 else:206 print('This is the last song.')207 elif index == 3:208 sound.stop()209 if SONG_FLAG < len(SONGS) - 1:210 SONG_FLAG += 1211 else:212 SONG_FLAG = 0213 #print('next song....')214 215 def draw_button(sound):216 color = (255,255,255)217 color_red = (230, 0, 0)218 #play or stop219 if PLAY_FLAG:220 sound.play(0)221 button_stop(screen, color)222 elif not PLAY_FLAG:223 button_play(screen, color)224 #perfer song225 if PREFER_FLAG:226 button_perfer(screen, color)227 elif not PREFER_FLAG:228 button_perfer(screen, color_red)229 #delete230 button_del(screen, color)231 #next song232 button_next_song(screen, color)233 234 def draw_volume_info():235 #the background of volume236 pygame.draw.rect(screen,237 (255, 255, 255),238 Rect((VOLUME_POINTS_START[-1][0],239 VOLUME_POINTS_START[-1][1]),240 (VOLUME_POINTS[-10][0] - VOLUME_POINTS_START[-1][0],241 20)))242 #the size of volume243 for v in range(VOLUME+1):244 if v > 0:245 pygame.draw.rect(screen,246 VOLUME_RECT_COLORS[v],247 Rect((VOLUME_POINTS_START[-v][0],248 VOLUME_POINTS_START[-v][1]),249 (VOLUME_POINTS[-v][0] - VOLUME_POINTS_START[-v][0],250 20)))251 252 def draw_song_title():253 title = font_song_title.render(SONGS[SONG_FLAG][1], True, (255,165,0))254 songer = font_song.render(SONGS[SONG_FLAG][2], True, (255, 255, 255))255 screen.blit(title, (320, 60))256 screen.blit(songer, (320, 110))257 258 def draw_state_bar_info():259 pygame.draw.line(screen, (165,42,42),(0, SCREEN_H), (SCREEN_W, SCREEN_H))260 #music info261 music_info = 'AllSongs: ' + str(len(SONGS)) +' Current: ' + str(SONG_FLAG + 1)262 text = font.render(music_info, True, (255,255,255))263 screen.blit(text, (0, SCREEN_H+5))264 #author into265 author_info = font.render('hongtenzone@foxmail.com', True, (255,255,255))266 screen.blit(author_info, (SCREEN_W - 160, SCREEN_H+5))267 #volume info268 volume_text = font.render('Volume: ' + str(VOLUME), True, (255, 255, 255))269 screen.blit(volume_text, (SCREEN_W - 310, SCREEN_H+5))270 271 while True:272 273 screen.blit(bg, (0, 0))274 pic = SONG_IMAGE[SONG_FLAG]275 bg_sound = SONG_ARRAY[SONG_FLAG]276 bg_sound.set_volume(0.1 * VOLUME)277 draw_button(bg_sound)278 listener()279 for event in pygame.event.get():280 if event.type == QUIT:281 bg_sound.stop()282 exit()283 elif event.type == KEYDOWN:284 if event.key == K_UP:285 pass286 elif event.key == K_DOWN:287 pass288 elif event.key == K_LEFT:289 if VOLUME > 0:290 VOLUME -= 1291 elif event.key == K_RIGHT:292 if VOLUME <= 9:293 VOLUME += 1294 elif event.type == MOUSEMOTION:295 pass296 297 elif event.type == MOUSEBUTTONDOWN:298 pressed_array = pygame.mouse.get_pressed()299 for index in range(len(pressed_array)):300 if pressed_array[index]:301 if index == 0: #When the LEFT button down302 mouse_down_listener(bg_sound)303 304 #picture rect305 draw_picture_rect()306 #volume information307 draw_volume_info()308 #state bar information309 draw_state_bar_info()310 #song title311 draw_song_title()312 313 screen.blit(pic, (62.5, 62.5))314 pygame.display.update()
你在运行的时候,肯恩会遇到一些问题,系统找不到音乐和图片....
这个由于文件中的音乐,字体和图片有一点大,所以我把图片和音乐删掉..你可以进行添加即可
还请大家给我想想办法,我好上传源文件给大家伙下载...
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-28153-1.html
恶心
肯定是这只学生放入去的
最后一笑超赞哎
这还是跟排队来北京巡逻区别很大的