基于python实现音乐播放器代码实例


Posted in Python onJuly 01, 2020

核心播放模块(pygame内核)

import time 
import pygame
import easygui as gui
 
file = r'D:\CloudMusic\G.E.M.邓紫棋,艾热 - 光年之外 (热爱版).mp3' #这里为音乐文件路径
pygame.mixer.init()
gui.msgbox("正在播放"+file)
track = pygame.mixer.music.load(file)
pygame.mixer.music.play()
time.sleep(240)
pygame.mixer.music.stop()

完整版源代码:

import os
import tkinter
import tkinter.filedialog
import time
import threading
import pygame #实现音频播放
 
#第一步:搭建界面
 
root = tkinter.Tk()
root.title('封亚飞的音乐播放器v1.0')
#设置窗口大小和屏幕绝对位置
root.geometry('460x600+500+100')
#固定窗口大小,设置窗口不可拉伸
root.resizable(False,False)
 
folder = ''	# 接收文件路径 默认为空
res=[]		# 
num=0
now_music = ''
 
 
#第二步:实现功能
 
def buttonChooseClick():
	#添加文件函数
 
	global folder
	global res
	#如果folder不为空,则····
	if not folder:
		folder = tkinter.filedialog.askdirectory() #选择目录,返回目录名
		musics = [folder + '\\' + music
				for music in os.listdir(folder)\
						\
				if music.endswith(('.mp3','.m4a','.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=220,width=260,height=300)
 
	if not folder:
		return
	global playing
	playing = True
 
 
	#根据情况禁用或启用相应按钮
 
	bottonPlay['state'] = 'normal'
	bottonStop['state'] = 'normal'
 
	#buttonPause['state'] = 'normal'
 
	pause_resume.set('播放')
 
 
#播放音乐函数
def play():
	
	#初始化混响设备
 
	if len(res):
		pygame.mixer.init()
		global num
		while playing:
			if not pygame.mixer.music.get_busy():
				#随机播放
				nextMusci = res[num]
				print(nextMusci)
				print(num)
				pygame.mixer.music.load(nextMusci.encode())
				#播放一次
				pygame.mixer.music.play(1)
				#print(len(res)-1)
				if len(res) - 1 ==num:
					num=0
				else:
					num +=1
				nextMusci = nextMusci.split("\\")[1:]
				musicName.set('playing....'+''.join(nextMusci))
			else:
				time.sleep(0.1)
 
 
#点击播放函数
def bottonPlayClik():
	bottonNext['state']='normal'
	bottonPrev['state']='normal'
 
	#选择要播放的音乐文件夹
	if pause_resume.get() == '播放':
		pause_resume.set('暂停')
		global folder
 
		if not folder:
			#选择目录,返回目录名
			folder = tkinter.filedialog.askdirectory()
 
		if not folder:
			return
 
		global playing
 
		playing = True
 
		#创建一个进程来播放音乐,当前主进程用来接收用户操作
 
		t = threading.Thread(target=play)
 
		t.start()
 
	elif pause_resume.get() == '暂停':
 
		pygame.mixer.music.pause()
		pause_resume.set('继续')
 
	elif pause_resume.get()=='继续':
		pygame.mixer.music.unpause()
 
		pause_resume.set('暂停')
 
 
#停止播放函数
def bottonStopClik():
	global playing
 
	playing = False
 
	pygame.mixer.music.stop()
 
#下一首函数
def bottonNextClik():
	global playing
 
	playing = False
 
	pygame.mixer.music.stop()
 
	global num 
 
	if len(res) == num:
		num=0
	playing = True
	global t
	t = threading.Thread(target=play)
 
	t.start()
 
#上一首函数
def bottonPrevClik():
	global playing
 
	playing=False
 
	pygame.mixer.music.stop()
 
	global num
 
	if num==0:
		num=len(res)-2
 
	elif num ==len(res)-1:
		num-=2
	else:
		num-=2
	print(num)
 
	playing = True
	global t
	t.threading.Thread(target=play)
 
	t.start()
#关闭窗口函数
def closeWindows():
	global playing
	playing=False
	time.sleep(0.3)
 
	try:
		pygame.mixer.music.stop()
		pygame.mixer.quit()
 
	except:
		pass
	root.destroy()
 
 
#声音控制函数
def control_voice(value=0.5):
	pygame.mixer.music.set_volume(float(value))
 
 
 
 
#添加按钮
bottonChoose=tkinter.Button(root,text='添加',command=buttonChooseClick)
#按钮布局
bottonChoose.place(x=50,y=50,width=50,height=20)
 
#播放按钮	跟踪变量值的变化
pause_resume=tkinter.StringVar(root,value='播放')
bottonPlay=tkinter.Button(root,textvariable=pause_resume,command=bottonPlayClik)
#按钮布局
bottonPlay.place(x=120,y=50,width=50,height=20)
bottonPlay['state'] = 'disabled'	#未添加文件(刚启动)时禁用
 
#停止播放
bottonStop = tkinter.Button(root,text='停止')
#按钮布局
bottonStop.place(x=50,y=130,width=50,height=20)
 
#下一首
bottonNext = tkinter.Button(root,text='下一首',command=bottonNextClik)
#按钮布局
bottonNext.place(x=50,y=100,width=50,height=20)
bottonNext['state']='disabled'
 
#上一首
bottonPrev = tkinter.Button(root,text='上一首',command=bottonPrevClik)
#按钮布局
bottonPrev.place(x=120,y=100,width=50,height=20)
bottonPrev['state']='disabled'
 
#显示内容--播放状态
musicName = tkinter.StringVar(root,value='暂时没有播放音乐...')
labelName = tkinter.Label(root,textvariable=musicName)
labelName.place(x=10,y=20,width=260,height=20)
 
#显示内容--音量调节
s = 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=150,width=200)
 
#关闭窗口
root.protocol("WM_DELETE_WINDOW",closeWindows)
 
 
 
 
 
#启用消息循环:显示出上一步创建的画板对象
root.mainloop()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中os和shutil模块实用方法集锦
May 13 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
用pandas按列合并两个文件的实例
Apr 12 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
Django框架验证码用法实例分析
May 10 Python
使用python接入微信聊天机器人
Mar 31 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
python线程中的同步问题及解决方法
Aug 29 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
python和js交互调用的方法
Jun 23 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 #Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 #Python
.img/.hdr格式转.nii格式的操作
Jul 01 #Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 #Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
Jul 01 #Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 #Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 #Python
You might like
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
PHP $_FILES函数详解
2011/03/09 PHP
PHP 透明水印生成代码
2012/08/27 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python探索之pLSA实现代码
2017/10/25 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
eBay美国官网:eBay.com
2020/10/24 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
建材投资建议书
2014/05/16 职场文书
党员目标管理责任书
2014/07/25 职场文书
离婚协议书范文2014
2014/10/16 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android