基于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 第一步 hello world
Sep 25 Python
Python判断变量是否已经定义的方法
Aug 18 Python
在Python中调用ggplot的三种方法
Apr 08 Python
Python实现视频下载功能
Mar 14 Python
Python中django学习心得
Dec 06 Python
一个Python最简单的接口自动化框架
Jan 02 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
python 写一个文件分发小程序
Dec 05 Python
django中ImageField的使用详解
Dec 21 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
PHP_Flame(Version:Progress)的原代码
2006/10/09 PHP
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
jquery插件制作 提示框插件实现代码
2012/08/17 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
python中List的sort方法指南
2014/09/01 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
店长职务说明书
2014/02/04 职场文书
高中生家长寄语大全
2014/04/03 职场文书
亲子活动总结
2014/04/26 职场文书
地道战观后感2000字
2015/06/04 职场文书
求职自我评价参考范文
2019/05/16 职场文书