第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > [转]Python实现多功能音乐播放器

[转]Python实现多功能音乐播放器

时间:2018-08-19 15:19:40

相关推荐

[转]Python实现多功能音乐播放器

前言

就是用Python做一个简易的音乐播放器,废话不多说,咱们直接开干

当然,今天做这个肯定不是最简单的,最简单的音乐播放器,9行代码足以

import timeimport pygamefile = r'歌曲路径'pygame.mixer.init()print('正在播放',file) track = pygame.mixer.music.load(file)pygame.mixer.music.play()time.sleep(130)pygame.mixer.music.stop()

开始今天的代码之前,准备工作

知识点和所需模块

1.python基础知识

2.requests库

3.time

4.pygame

5.tkinter

6.线程

环境

windowspycharm .2python 3.8

完整代码,运行即可,记得👍👍👍(直接明示了)

# 导入import osimport timeimport tkinterimport tkinter.filedialogimport threadingimport pygame # piproot = tkinter.Tk()root.title('音乐播放器')root.geometry('460x600+500+100')root.resizable(False,False) # 不能拉伸folder =''res = []num = 0now_music = ''def buttonChooseClick():"""添加文件夹:return:"""global folderglobal resif not folder:folder = tkinter.filedialog.askdirectory()musics = [folder + '\\' + musicfor music in os.listdir(folder) \\if music.endswith(('.mp3','.wav','.ogg'))]ret = []for i in musics:ret.append(i.split('\\')[1:])res.append(i.replace('\\','/'))var2 = tkinter.StringVar()var2.set(ret)lb = tkinter.Listbox(root,listvariable=var2)lb.place(x=50,y=100,width=260,height=300)if not folder:returnglobal playingplaying = True# 根据情况禁用和启用相应的按钮buttonPlay['state'] = 'normal'buttonStop['state'] = 'normal'# buttonPause['state'] = 'normal'pause_resume.set('播放')def play():"""播放音乐:return:"""if len(res):pygame.mixer.init()global numwhile playing:if not pygame.mixer.music.get_busy():netxMusic = res[num]print(netxMusic)print(num)pygame.mixer.music.load(netxMusic.encode())# 播放pygame.mixer.music.play(1)if len(res) -1 == num:num = 0else:num = num + 1netxMusic = netxMusic.split('\\')[1:]musicName.set('playing......' + ''.join(netxMusic))else:time.sleep(0.1)def buttonPlayClick():"""点击播放:return:"""buttonNext['state'] = 'normal'buttonPrev['state'] = 'normal'# 选择要播放的音乐文件夹if pause_resume.get() == '播放':pause_resume.set('暂停')global folderif not folder:folder = tkinter.filedialog.askdirectory()if not folder:returnglobal playingplaying = True# 创建一个线程来播放音乐,当前主线程用来接收用户操作t = threading.Thread(target=play)t.start()elif pause_resume.get() == '暂停':# pygame.mixer.init()pygame.mixer.music.pause()pause_resume.set('继续')elif pause_resume.get() == '继续':# pygame.mixer.init()pygame.mixer.music.unpause()pause_resume.set('暂停')def buttonStopClick():"""停止播放:return:"""global playingplaying = Falsepygame.mixer.music.stop()def buttonNextClick():"""下一首:return:"""global playingplaying = Falsepygame.mixer.music.stop()global numif len(res) == num:num = 0playing = True# 创建线程播放音乐,主线程用来接收用户操作t = threading.Thread(target=play)t.start()def closeWindow():"""关闭窗口:return:"""# 修改变量,结束线程中的循环global playingplaying = Falsetime.sleep(0.3)try:# 停止播放,如果已停止,# 再次停止时会抛出异常,所以放在异常处理结构中pygame.mixer.music.stop()pygame.mixer.quit()except:passroot.destroy()def control_voice(value=0.5):"""声音控制:param value: 0.0-1.0:return:"""pygame.mixer.music.set_volume(float(value))def buttonPrevClick():"""上一首:return:"""global playingplaying = Falsepygame.mixer.music.stop()## pygame.mixer.quit()global num# num += 1# num -= 1if num == 0:num = len(res) - 2# num -= 1elif num == len(res) - 1:num -= 2else:num -= 2# num -= 1print(num)playing = True# 创建一个线程来播放音乐,当前主线程用来接收用户操作t = threading.Thread(target=play)t.start()# 窗口关闭root.protocol('WM_DELETE_WINDOW', closeWindow)# 添加按钮buttonChoose = tkinter.Button(root,text='添加',command=buttonChooseClick)# 布局buttonChoose.place(x=50,y=10,width=50,height=20)# 播放按钮pause_resume = tkinter.StringVar(root,value='播放')buttonPlay = tkinter.Button(root,textvariable=pause_resume,command=buttonPlayClick)buttonPlay.place(x=190,y=10,width=50,height=20)buttonPlay['state'] = 'disabled'# 停止按钮buttonStop = tkinter.Button(root, text='停止',command=buttonStopClick)buttonStop.place(x=120, y=10, width=50, height=20)buttonStop['state'] = 'disabled'# 下一首buttonNext = tkinter.Button(root, text='下一首',command=buttonNextClick)buttonNext.place(x=260, y=10, width=50, height=20)buttonNext['state'] = 'disabled'# 上一首buttonPrev = tkinter.Button(root, text='上一首',command=buttonPrevClick)buttonPrev.place(x=330, y=10, width=50, height=20)buttonPrev['state'] = 'disabled'# 标签musicName = tkinter.StringVar(root, value='暂时没有播放音乐...')labelName = tkinter.Label(root, textvariable=musicName)labelName.place(x=10, y=30, width=260, height=20)# 音量控制# HORIZONTAL表示为水平放置,默认为竖直,竖直为verticals = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL,length=240, showvalue=0, tickinterval=2, resolution=0.1,command=control_voice)s.place(x=50, y=50, width=200)# 显示root.mainloop()

效果展示

简易版的

还有个半成品的,目前代码没写完

导入模块

import osimport timeimport tkinterimport tkinter.filedialogimport threadingimport pygame

一、界面

root = tkinter.Tk()root.title('音乐播放器')root.geometry('460x600+500+100')root.resizable(False,False) # 不能拉伸# 显示root.mainloop()

按钮

# 添加按钮buttonChoose = tkinter.Button(root,text='添加')# 布局buttonChoose.place(x=50,y=10,width=50,height=20)# 播放按钮pause_resume = tkinter.StringVar(root,value='播放')buttonPlay = tkinter.Button(root,textvariable=pause_resume)buttonPlay.place(x=190,y=10,width=50,height=20)buttonPlay['state'] = 'disabled'# 停止按钮buttonStop = tkinter.Button(root, text='停止')buttonStop.place(x=120, y=10, width=50, height=20)buttonStop['state'] = 'disabled'# 下一首buttonNext = tkinter.Button(root, text='下一首')buttonNext.place(x=260, y=10, width=50, height=20)buttonNext['state'] = 'disabled'# 上一首buttonPrev = tkinter.Button(root, text='上一首')buttonPrev.place(x=330, y=10, width=50, height=20)buttonPrev['state'] = 'disabled'# 标签musicName = tkinter.StringVar(root, value='暂时没有播放音乐...')labelName = tkinter.Label(root, textvariable=musicName)labelName.place(x=10, y=30, width=260, height=20)# 音量控制# HORIZONTAL表示为水平放置,默认为竖直,竖直为verticals = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL,length=240, showvalue=0, tickinterval=2, resolution=0.1)s.place(x=50, y=50, width=200)

二、功能

创建一个文件目录

folder =''res = []num = 0now_music = ''

音乐读取功能

def buttonChooseClick():global folderglobal resif not folder:folder = tkinter.filedialog.askdirectory()musics = [folder + '\\' + musicfor music in os.listdir(folder) \\if music.endswith(('.mp3','.wav','.ogg'))]ret = []for i in musics:ret.append(i.split('\\')[1:])res.append(i.replace('\\','/'))if not folder:returnglobal playingplaying = True# 根据情况禁用和启用相应的按钮buttonPlay['state'] = 'normal'buttonStop['state'] = 'normal'# buttonPause['state'] = 'normal'pause_resume.set('播放')

显示已加载的音乐

var2 = tkinter.StringVar()var2.set(ret)lb = tkinter.Listbox(root,listvariable=var2)lb.place(x=50,y=100,width=260,height=300)

播放音乐

def play():if len(res):pygame.mixer.init()global numwhile playing:if not pygame.mixer.music.get_busy():netxMusic = res[num]print(netxMusic)print(num)pygame.mixer.music.load(netxMusic.encode())# 播放pygame.mixer.music.play(1)if len(res) -1 == num:num = 0else:num = num + 1netxMusic = netxMusic.split('\\')[1:]musicName.set('playing......' + ''.join(netxMusic))else:time.sleep(0.1)# 点击播放def buttonPlayClick():buttonNext['state'] = 'normal'buttonPrev['state'] = 'normal'# 选择要播放的音乐文件夹if pause_resume.get() == '播放':pause_resume.set('暂停')global folderif not folder:folder = tkinter.filedialog.askdirectory()if not folder:returnglobal playingplaying = True# 创建一个线程来播放音乐,当前主线程用来接收用户操作t = threading.Thread(target=play)t.start()elif pause_resume.get() == '暂停':# pygame.mixer.init()pygame.mixer.music.pause()pause_resume.set('继续')elif pause_resume.get() == '继续':# pygame.mixer.init()pygame.mixer.music.unpause()pause_resume.set('暂停')

停止播放

def buttonStopClick():global playingplaying = Falsepygame.mixer.music.stop()

下一首

def buttonNextClick():global playingplaying = Falsepygame.mixer.music.stop()global numif len(res) == num:num = 0playing = True# 创建线程播放音乐,主线程用来接收用户操作t = threading.Thread(target=play)t.start()

上一首

def buttonPrevClick():global playingplaying = Falsepygame.mixer.music.stop()## pygame.mixer.quit()global num# num += 1# num -= 1if num == 0:num = len(res) - 2# num -= 1elif num == len(res) - 1:num -= 2else:num -= 2# num -= 1print(num)playing = True# 创建一个线程来播放音乐,当前主线程用来接收用户操作t = threading.Thread(target=play)t.start()

音量控制

def control_voice(value=0.5):pygame.mixer.music.set_volume(float(value))

关闭窗口

def closeWindow():# 修改变量,结束线程中的循环global playingplaying = Falsetime.sleep(0.3)try:# 停止播放,如果已停止,# 再次停止时会抛出异常,所以放在异常处理结构中pygame.mixer.music.stop()pygame.mixer.quit()except:passroot.destroy()

---------------------

作者:松鼠爱吃饼干

来源:CSDN

原文:/m0_48405781/article/details/122947011?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-1.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-1.nonecase

版权声明:本文为作者原创文章,转载请附上博文链接!

内容解析By:CSDN,CNBLOG博客文章一键转载插件

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。