网上有很多关于15个采纳pos机的小知识,pygame高级音乐播放器的python相关知识复习的知识,也有很多人为大家解答关于15个采纳pos机的小知识的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!
本文目录一览:
15个采纳pos机的小知识
1说明:
1.1 pygame音乐播放器:
#属于原作者https://github.com/Hongten/PyMusichttps://www.cnblogs.com/hongten/p/hongten_pygame_pymusic_public.html
1.2 在他基础上对代码进行删除、修改、润色、改进、注释等处理,突出重点,提高可读性。
1.3 复习:python法。
1.3.1 图片的相关知识,将jpg转换png法,修改图片大小。
1.3.2 如何将mp3转换OGG格式。
1.4 没有的模块,自己pip安装。
1.5 python3.8和微软vscode编辑器,亲测过,值得收藏和分享,可以转发。
1.6 增加tool文件夹,里面都是python的文件,可以进行相关转换。
2 文件结构:简化过
3 简化过的代码:完整版:pymusic.py
#---第1步:导出模块---import os, pygamefrom pygame.locals import *from sys import exitfrom random import *#---第2步:初始化pygame,窗口标题、大小设定等---pygame.init()pygame.display.set_caption('pygame高级音乐播放器')#pygame的特点,就是屏幕大小的设定,与挂在屏幕上的图片和文字等有关,所以需要单独定义#尽管有点觉得代码繁琐,大型游戏和项目还是推荐这样#推荐大小1280和850SCREEN_W = 1280SCREEN_H = 850#注意没有H+20干嘛,就是后面的显示底部信息栏用的SCREEN_DEFAULT_SIZE = (SCREEN_W, SCREEN_H + 20)screen = pygame.display.set_mode(SCREEN_DEFAULT_SIZE, 0, 32)#背景图片设置,需放在screen定义之后,否则报错,大小1366×768,可以用代码修改bg = pygame.image.load('/home/xgj/Desktop/src/image/bg.jpg').convert()#通用字体和大小设置font = pygame.font.Font(('/home/xgj/Desktop/src/hwfs.ttf'), 24)#---第3步:个性化设置:初始化音量,图片坐标,按钮坐标等设置---VOLUME =5IMAGE_START_POS = (60, 60) #图片初始化坐标IMAGE_END_POS = (245, 245) #图片结束坐标#因为播放按钮的是作者画出的,所以坐标、半径、宽度定义CIRCLES_POS = [(85, 350), (150, 350), (215, 350), (280, 350), (555, 425)]CIRCLR_R = 25CIRCLR_W = 3#---第4步:路径和歌曲列表等#注意路径和目录,如果打包,可能路径和目录需要从新设计IMAGE_DIR = '/home/xgj/Desktop/src/image'#放音乐的路径sound_DIR = '/home/xgj/Desktop/src/sound'#演唱者的图片大小=size:(240*240)SONG_FLAG = 0#音乐文件OGG放在/home/xgj/Desktop/src/sound下#图片png放在/home/xgj/Desktop/src/image下#可自定义,其他信息可以自定义#比如自己换歌曲,换图片,即可#歌曲列表SONGS = [('1.OGG', 'You Raise Me Up', 'WestLife', '1.png'), ('2.OGG', '不完整的旋律', '王力宏', '2.png'), ('3.OGG', 'A Place Nearby' , 'Lene Marlin', '3.png'), ('4.OGG', 'Just Give Me A Reason' , 'Pink', '4.png'), ('5.OGG', '我 ' , '张国荣', '5.png'), ('6.OGG', '大城小爱' , '王力宏', '6.png'), ('7.OGG', '聊天' , '郭静', '7.png')]#---第5步:音量定义---VOLUME_POINTS = []VOLUME_POINTS_START = []VOLUME_Rect_COLORS = []for p in range(170, 250, 7): #音量位置,因为信息栏的字体变大后需要调整 #减去300与下面的音量5的设置调整一下,一前一后。 VOLUME_POINTS.append([SCREEN_W - p-300,SCREEN_H-40])for ps in range(175, 250, 7): #位置 VOLUME_POINTS_START.append([SCREEN_W - ps-300, SCREEN_H-40]) #音量随机颜色 VOLUME_RECT_COLORS.append((randint(0, 255), randint(0, 255), randint(0, 255)))#---第6步:歌曲播放设置---SONG_ARRAY = []SONG_IMAGE = []for song in range(len(SONGS)): #简化过 SONG_ARRAY.append(pygame.mixer.Sound(os.path.join(SOUND_DIR, SONGS[song][0]))) SONG_IMAGE.append(pygame.image.load(os.path.join(IMAGE_DIR, SONGS[song][3])).convert())#---第7步:画歌曲图片定义---def draw_picture_rect(): #屏幕、颜色、坐标 pygame.draw.rect(screen,(255, 255, 255),Rect(IMAGE_START_POS, IMAGE_END_POS))#---第8步:音乐播放等按钮绘画---#播放=play按钮def button_play(screen, color): pygame.draw.circle(screen, color, CIRCLES_POS[0], CIRCLR_R, CIRCLR_W) points=[(77,340),(77,360),(95,350)] pygame.draw.polygon(screen,color,points)#暂停=stop按钮def button_stop(screen, color): pygame.draw.circle(screen, color, CIRCLES_POS[0], CIRCLR_R, CIRCLR_W) pygame.draw.rect(screen,color,Rect(77, 340, 5, 23 )) pygame.draw.rect(screen,color,Rect(88, 340, 5, 23 ))#上一首=perfer按钮def button_perfer(screen, color): pygame.draw.circle(screen, color, CIRCLES_POS[1], CIRCLR_R, CIRCLR_W) points=[(138,340),(162,340),(150,363)] pygame.draw.polygon(screen,color,points)#删除=del按钮def button_del(screen, color): pygame.draw.circle(screen, color, CIRCLES_POS[2], CIRCLR_R, CIRCLR_W) pygame.draw.circle(screen, color, (215, 340), 6, 3) pygame.draw.rect(screen,color,Rect(200, 340, 30, 6 )) pygame.draw.rect(screen,color,Rect(204, 340, 3, 20 )) pygame.draw.rect(screen,color,Rect(210, 340, 3, 20 )) pygame.draw.rect(screen,color,Rect(217, 340, 3, 20 )) pygame.draw.rect(screen,color,Rect(223, 340, 3, 20 )) pygame.draw.rect(screen,color,Rect(204, 360, 22, 5 ))#下一首=next按钮def button_next_song(screen, color): pygame.draw.circle(screen, color, CIRCLES_POS[3], CIRCLR_R, CIRCLR_W) points_one =[(270,343),(270,357),(277,350)] points_two =[(277,343),(277,357),(284,350)] pygame.draw.polygon(screen,color,points_one) pygame.draw.polygon(screen,color,points_two) pygame.draw.rect(screen,color,Rect(284, 343, 5, 15 ))#---播放等按钮绘画---作者很牛是不是,点个赞---#---第9步:全局定义flag,监听鼠标点击按钮事件函数---PLAY_FLAG = TruePREFER_FLAG = True#鼠标点击播放等按钮的监听设置def mouse_down_listener(sound): global PLAY_FLAG global PREFER_FLAG global SONG_FLAG #获取鼠标点击的坐标 x, y = pygame.mouse.get_pos() for index in range(len(CIRCLES_POS)): p_x = (CIRCLES_POS[index][0] - x)**2 p_y = (CIRCLES_POS[index][1] - y)**2 p_r = (CIRCLR_R)**2 if (p_x + p_y <= p_r): if index == 0 and PLAY_FLAG: sound.stop() PLAY_FLAG = False elif index == 0 and not PLAY_FLAG: sound.play(0) PLAY_FLAG = True elif index == 1 and PREFER_FLAG: PREFER_FLAG = False elif index == 1 and not PREFER_FLAG: PREFER_FLAG = True elif index == 2: sound.stop() if SONG_FLAG > 0: SONGS.pop(SONG_FLAG) SONG_IMAGE.pop(SONG_FLAG) SONG_ARRAY.pop(SONG_FLAG) if SONG_FLAG >= len(SONGS) - 1: SONG_FLAG -= 1 else: #print('This is the last song.') #这个注释掉后需要加个pass pass elif index == 3: sound.stop() if SONG_FLAG < len(SONGS) - 1: SONG_FLAG += 1 else: SONG_FLAG = 0#---第10步:定义画按钮的点击函数,即播放还是暂停音乐等---def draw_button(sound): color = (255,255,255) color_red = (230, 0, 0) #play or stop if PLAY_FLAG: sound.play(0) button_stop(screen, color) elif not PLAY_FLAG: button_play(screen, color) #perfer song if PREFER_FLAG: button_perfer(screen, color) elif not PREFER_FLAG: button_perfer(screen, color_red) #delete button_del(screen, color) #next song button_next_song(screen, color)#---第11步:画音量信息和调节音量设置---def draw_volume_info(): #the background of volume #20代表音量调节背景框的高度 pygame.draw.rect(screen, (255, 255, 255), Rect((VOLUME_POINTS_START[-1][0], VOLUME_POINTS_START[-1][1]), (VOLUME_POINTS[-10][0] - VOLUME_POINTS_START[-1][0], 20))) #the size of volume for v in range(VOLUME+1): if v > 0: #20代表目前的音量高度 pygame.draw.rect(screen, VOLUME_RECT_COLORS[v], Rect((VOLUME_POINTS_START[-v][0], VOLUME_POINTS_START[-v][1]), (VOLUME_POINTS[-v][0] - VOLUME_POINTS_START[-v][0], 20)))#---第12步:歌曲名显示设置---def draw_song_title(): title = font.render(SONGS[SONG_FLAG][1], True, (255,165,0)) songer = font.render(SONGS[SONG_FLAG][2], True, (255, 255, 255)) screen.blit(title, (320, 60)) screen.blit(songer, (320, 110))#---第13步:播放状态栏信息设置---def draw_state_bar_info(): #底部歌曲信息栏的水平红线 pygame.draw.line(screen, (165,42,42),(0, SCREEN_H-70), (SCREEN_W, SCREEN_H-70)) #music info music_info = 'AllSongs: ' + str(len(SONGS)) +' Current: ' + str(SONG_FLAG + 1) #font是通用字体设置 text = font.render(music_info, True, (255,255,255)) #-50,则信息栏的文字往上提高,便于字体变大后的显示 screen.blit(text, (0, SCREEN_H-50)) #volume info,bug,str(VOLUME)当按左右箭头调节音量时,原来是5,之后的数字覆盖而模糊 volume_text = font.render('Volume: ' + str(VOLUME), True, (255, 255, 255)) screen.blit(volume_text, (SCREEN_W - 750, SCREEN_H-50)) #author into author_info = font.render('hongtenzone@foxmail.com', True, (255,255,255)) screen.blit(author_info, (SCREEN_W - 300, SCREEN_H-50))#---第14步:播放循环---while True: screen.blit(bg, (0, 0)) pic = SONG_IMAGE[SONG_FLAG] bg_sound = SONG_ARRAY[SONG_FLAG] bg_sound.set_volume(0.1 * VOLUME) draw_button(bg_sound) #listener() for event in pygame.event.get(): if event.type == QUIT: bg_sound.stop() exit() elif event.type == KEYDOWN: #音量调节设置,←和→的定义 if event.key == K_LEFT: if VOLUME > 0: VOLUME -= 1 elif event.key == K_RIGHT: if VOLUME <= 9: VOLUME += 1 pygame.display.update() elif event.type == MOUSEBUTTONDOWN: pressed_array = pygame.mouse.get_pressed() for index in range(len(pressed_array)): if pressed_array[index]: if index == 0: #When the LEFT button down #鼠标点击播放等按钮的监听 mouse_down_listener(bg_sound) #picture rect draw_picture_rect() #volume information draw_volume_info() #state bar information draw_state_bar_info() #song title draw_song_title() #显示图片坐标,与上面的60和60坐标相呼应 #screen.blit(pic, (62.5, 62.5)) #最新的python3.8和pygame1.9.6浮点数是报错 screen.blit(pic, (62, 62)) pygame.display.update()
注意路径自定义。
4 效果:
小bug:当前曲目:1~7和音量调节数字1~10,模糊不清;启动有点慢。
5 相关工具介绍:3个好工具。
5.1 mp3toogg.py代码:用来将mp3转换为OGG音乐文件。
奇怪,原作者为什么不用mp3格式的音乐文件呢?莫非他也是采纳国外某些人的习惯么?我也是第一次接触OGG音乐文件,是不是可以改为mp3音乐文件操作起来更简单些。
from pydub import AudioSegment#注意路径song = AudioSegment.from_mp3("/home/xgj/Desktop/src/1.mp3")#song.export("out.ogg", format="ogg") # Is the same as:song.export("out.ogg", format="ogg", codec="libvorbis")
5.2 picsize.py代码:调节图片大小的。
from PIL import Imageimport os# 获取文件大小:KBdef get_size(file): size = os.path.getsize(file) return size / 1024#输出文件def get_outfile(infile, outfile): if outfile: return outfile dir, suffix = os.path.splitext(infile) outfile = '{}-out{}'.format(dir, suffix) return outfile#修改图片函数def resize_image(infile, outfile='', x_s=1376): im = Image.open(infile) #输出指定大小,60×60大小图片 out = im.resize((1366, 768), Image.ANTIALIAS) outfile = get_outfile(infile, outfile) out.save(outfile)#主函数if __name__ == '__main__': #路径可自定义 resize_image('/home/xgj/Desktop/src/data/image/background/bg.jpg')
5.3 图片格式转换:jpgtopng.py代码:
# pip install Pillowimport PIL.Image as Image# 以第一个像素为准,相同色改为透明def transparent_back(img): img = img.convert('RGBA') L, H = img.size color_0 = (255,255,255,255)#要替换的颜色 for h in range(H): for l in range(L): dot = (l,h) color_1 = img.getpixel(dot) if color_1 == color_0: color_1 = color_1[:-1] + (0,) img.putpixel(dot,color_1) return img if __name__ == '__main__': img=Image.open('1231.jpg') img=transparent_back(img) img.save('1231.png')
好东西拿来分享,值得收藏。
以上就是关于15个采纳pos机的小知识,pygame高级音乐播放器的python相关知识复习的知识,后面我们会继续为大家整理关于15个采纳pos机的小知识的知识,希望能够帮助到大家!
