基于python实现音乐播放器代码实例
时间:2022-07-27
本文章向大家介绍基于python实现音乐播放器代码实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
核心播放模块(pygame内核)
import time
import pygame
import easygui as gui
file = r'D:CloudMusicG.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()
以上就是本文的全部内容,希望对大家的学习有所帮助。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 算法篇:树之路径之和
- 听说同学你搞不懂Java的LinkedHashMap,可笑
- 揭开数组的真面目
- DLL导出函数Interface与实现分离
- DUI -实现GDI透明效果
- maven 打包过滤二进制压缩与静态文件失效的事情
- The container name “/xx“ is already in use by container “xx“. You have to remove (or rename) that
- ClickHouse的可视化工具Tabix
- 跳表
- 浅谈AQS
- linux进程调度
- 696. 计数二进制子串 Krains 2020-08-10 09:42:23 字符串
- 给你的热图挑选一个合适的渐变色
- 网易云解锁灰色音乐
- AndroidStdio1_4