基于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中xrange用法分析
Apr 15 Python
python 上下文管理器使用方法小结
Oct 10 Python
名片管理系统python版
Jan 11 Python
python实现txt文件格式转换为arff格式
May 31 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
Python使用matplotlib绘制三维图形示例
Aug 25 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
Python创建字典的八种方式
Feb 27 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
在Mac中配置Python虚拟环境过程解析
Jun 22 Python
Python识别验证码的实现示例
Sep 30 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
实例讲解Python3中abs()函数
2019/02/19 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
2020/12/10 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
美国时尚在线:Showpo
2017/09/08 全球购物
导游个人求职信
2014/04/25 职场文书
学党史心得体会
2014/09/05 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
上班迟到检讨书
2015/05/06 职场文书
大学生实习证明
2015/06/16 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS