基于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根据路径导入模块的方法
Sep 30 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
Python输入二维数组方法
Apr 13 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
python3.6 如何将list存入txt后再读出list的方法
Jul 02 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
利用python求积分的实例
Jul 03 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Python ConfigParser模块的使用示例
Oct 12 Python
python递归函数用法详解
Oct 26 Python
基于python爬取梨视频实现过程解析
Nov 09 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
微信access_token的获取开发示例
2015/04/16 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
Jquery网页内滑动缓冲导航的实现代码
2015/04/05 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
Mac安装python3的方法步骤
2019/08/09 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
python创建文本文件的简单方法
2020/08/30 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
财务总经理岗位职责
2014/02/16 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
交警失职检讨书
2015/01/26 职场文书
个人总结与自我评价
2015/02/14 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
单位工资证明范本
2015/06/12 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python