from pygame import mixer#从PYGAME库导入MIXEWR包用来放声音
mixer.init()#假惺惺初始化一下
sound=mixer.Sound("qq.wav")#打开音乐文件句柄
sound.play()#播放
def menu(status):#菜单显示os.system("cls")#控制台清屏print("wav player {}".format(status))print("---")print("1.play")print("2.the next one")print("3.the last one")print("4.stop")print("0.over")print("---")def playwav(song):#播放音乐,注释:比下一个函数就少个了停止global status,soundsound=mixer.Sound(wavfiles[index])sound.play(loops=0)status="{} is playing".format(wavfiles[index])def playNewwav(song):#播放新音乐global status,sound#全局变量sound.stop()#stop the current songsound=mixer.Sound(wavfiles[index])#get the new songsound.play(loops=0)#play the new song,loops=0不循环status="{} is playing".format(wavfiles[index])#更新信息口串from pygame import mixer#导入混合库(音乐)
import glob,os#导入GLOB,系统模块
'''
glob模块是最简单的模块之一内容非常少
用它可以查找符合特定规则的文件路径名
跟使用windows下的文件搜索差不多
查找文件只用到三个匹配符:
”*”匹配0个或多个字符
”?”匹配单个字符
”[]”匹配指定范围内的字符
如:[0-9]匹配数字。
'''
mixer.init()#假惺惺初始化wavfiles=glob.glob("*.wav")#get the list
index=0#下标初始化为0
status=""#信息串为0
sound=mixer.Sound(wavfiles[index])#get no.index soundwhile True:#死循环menu(status)#传入信息串choice=int(input("choose : "))#读出选择if choice==1:playwav(wavfiles[index])#播音乐elif choice==2:index+=1#下标加一if index==len(wavfiles):#如果超限index=0#就归0playNewwav(wavfiles[index])#播放elif choice==3:index-=1#下标减一if index<0:#如果小于0index=len(wavfiles)-1#就变最大下标playNewwav(wavfiles[index])#播放elif choice==4:sound.stop()#停止播放status="stop"#更新状态else:#否则break#跳出
sound.stop()#关掉音乐
print("over")#输出,OVER
#音乐播放器
#本例中使用的两个StringVar类型变量是关键
def choose():global playsong#引用全局变量msg.set("\n playing song: "+choice.get())#改变信息,获得choice这个StringVar的文本信息,注意是文本信息,不是其变量值playsong=choice.get()#注意!就是在这里更改所选歌目def pausemp3():global playsong#引用全局变量mixer.music.pause()msg.set("\n pause song {}".format(playsong))def increase():global volume#引用全局变量volume+=0.1if volume>=1:volume=1mixer.music.set_volume(volume)#设置音量大小def decrease():global volume#引用全局变量volume-=0.1if volume<=0.3:volume=0.3mixer.music.set_volume(volume)#设置音量大小def playmp3():global status,playsong,preplaysong#引用全局变量choose()#得到当前选择的歌if playsong==preplaysong:#同一首歌if not mixer.music.get_busy():#如果没有正忙mixer.music.load(playsong)#加载歌曲mixer.music.play(loops=-1)#循环播放else:#已在忙mixer.music.unpause()#可以继续播了msg.set("\n playing song: {}".format(playsong))#更新MSGelse:#不同歌playNewmp3()#播放preplaysong=playsong#更新旧歌def playNewmp3():global playsong#引用全局变量mixer.music.stop()#停止旧音乐mixer.music.load(playsong)#加载新音乐mixer.music.play(loops=-1)#循环msg.set("\n playing song: {}".format(playsong))#更新MSG信息def stopmp3():mixer.music.stop()#停止音乐msg.set("\n stop")#输出提示信息def exitmp3():mixer.music.stop()#停止音乐win.destroy()#破坏窗口import tkinter as tk     #导入界面库
from pygame import mixer #从PYGAME导入混合模块
import glob              #查找模块
mixer.init()             #假惺惺初始化
win=tk.Tk()              #申请窗口
win.geometry("640x380")  #设计窗口大小
win.title("mp3 player")  #窗口标题
labeltitle=tk.Label(win,text="\nmp3 player",fg="red",font=("新细明体",12))#初始化标签
labeltitle.pack()       #打包
frame1=tk.Frame(win)    #定义框架
frame1.pack()           #打包
mp3files=glob.glob("*.mp3")     #查后MP3后缀的文件
playsong=preplaysong=""         #初始化变量
index=0     #初始值
volume=0.6  #初始值
choice=tk.StringVar()   #得到窗口的字符串变量
print(choice)           #输出当前TK的内部字符串变量
for mp3 in mp3files:    #遍历确定单选按钮rbtem=tk.Radiobutton(frame1,text=mp3,variable=choice,value=mp3,command=choose)#创建按钮#注意上面这句用了choice这个StringVar类对象来作为变量值if(index==0):       #下标为0rbtem.select()  #选择playsong=preplaysong=mp3    #播放rbtem.grid(row=index,column=0,sticky='w')#方格中的内容INDEX行只有第0列,放贴着左边index+=1            #下标加一msg=tk.StringVar()#在获得符串变量,注意这其实就相当于申请了一个字符串,仅此而已
print(msg)#输出MSG这个变量的值,这个值是指TK内部给这个变量的命名,不是他显示的文本
msg.set("\nplay the music: ")#改变当前这个上字符串
label=tk.Label(win,textvariable=msg,fg="blue",font=("新细明体",10))#设置标签,其文本就是MSG这个StringVar类对象
label.pack()#打包
labelsep=tk.Label(win,text="\n")#设置标签
labelsep.pack()#打包frame2=tk.Frame(win)#在win窗口下继续申请框架
frame2.pack()#打包
button1=tk.Button(frame2,text="play",width=8,command=playmp3)#定义按钮,父对像框架2,文本play,宽8像素,点击命令
button1.grid(row=0,column=0,padx=5,pady=5)#第0行第0列,X方向左右各延伸5像素,Y方向上下各延伸5像素
button2=tk.Button(frame2,text="pause",width=8,command=pausemp3)#定义按钮,父对像框架2,文本pause,宽8像素,点击命令
button2.grid(row=0,column=1,padx=5,pady=5)#第0行第0列,X方向左右各延伸5像素,Y方向上下各延伸5像素
button3=tk.Button(frame2,text="increase",width=8,command=increase)#定义按钮,父对像框架2,文本increase,宽8像素,点击命令
button3.grid(row=0,column=2,padx=5,pady=5)#第0行第0列,X方向左右各延伸5像素,Y方向上下各延伸5像素
button4=tk.Button(frame2,text="decrease",width=8,command=decrease)#定义按钮,父对像框架2,文本decrease,宽8像素,点击命令
button4.grid(row=0,column=3,padx=5,pady=5)#第0行第0列,X方向左右各延伸5像素,Y方向上下各延伸5像素
button5=tk.Button(frame2,text="stop",width=8,command=stopmp3)#定义按钮,父对像框架2,文本stop,宽8像素,点击命令
button5.grid(row=0,column=4,padx=5,pady=5)#第0行第0列,X方向左右各延伸5像素,Y方向上下各延伸5像素
button6=tk.Button(frame2,text="exit",width=8,command=exitmp3)#定义按钮,父对像框架2,文本exit,宽8像素,点击命令
button6.grid(row=0,column=5,padx=5,pady=5)#第0行第0列,X方向左右各延伸5像素,Y方向上下各延伸5像素
win.protocol("WW_DELETE_WINDOW",exitmp3)#当点击了关闭窗口按钮时执行exitmp3函数
win.mainloop()#等待窗口消息'''
小结一下:本例中用了两个StringVar变量
StringVar是TK下自设的一个变量,特点是每调用一次都会自加1产生一个新值,在控制台可以看到是PY_VARX的形式,X是序号
choice是其中一个StringVar变量,上面赋给单选按钮的variable成员变量=choice时每个按钮都不一样
msg是其中一个StringVar变量,被用作标签的textvariable文本,然后每次都SET方法设置其显示文本
注意是设置其显示文本,就是说这个MSG变量的值是没变的,也是PY_VARX,但他也有显示文本的成员属性
其余用处其实与一般的STRING差不多,起码本例是这样,抛砖引玉吧
'''

PYTHON笔记第十一章之pygame.mixer相关推荐

  1. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  2. 《金融学》笔记 第十一章 货币政策

    <金融学>笔记 第十一章 货币政策 前言 在<<金融学>笔记>中开了一个头,现在完善具体细节. 金融范畴篇 第一章 货币的本质 第二章 货币制度 第三章 信用.利息 ...

  3. [go学习笔记.第十一章.项目案例] 2.客户信息管理系统

    一.基本介绍 1.需求说明 项目需求分析 1.模拟实现基于文本界面的 < 客户信息管理软件 > 2.该软件实现对客户对象的插入.修改和删除(用切片实现),并能够打印客户明细表 2.界面设计 ...

  4. [go学习笔记.第十一章.项目案例] 1.家庭收支记账软件项目

    一.基本介绍 1.项目开发流程说明 2.项目需求说明 目标: 模拟实现一个基于文本界面的<<家庭记账软件>> 掌握初步的编程技巧和调试技巧 主要涉及以下知识点 : (1).局部 ...

  5. Linux(b站视频兄弟连)自学笔记第十一章——shell编程

    Linux(b站视频兄弟连)自学笔记第十一章--shell基础 正则表达式 字符截取命令 cut命令 printf命令 awk命令 sed命令 字符处理命令 判断条件 流程控制 if语句 case语句 ...

  6. 《统计学习方法》学习笔记 第二十一章 PageRank算法

    目录 1 PageRank的定义 1.1 基本想法 1.2 有向图和随机游走模型 1 有向图(directed graph) 2 随机游走模型 3 PageRank的基本定义 4 PageRank的一 ...

  7. [swift 进阶]读书笔记-第十一章:互用性 C11P1 实践:封装 CommonMark

    第十一章:互用性 Interoperability 前言: swift 的最大优点就是与C 或者 OC 混编的时候稳的一匹 本章主要讲了swift和C之间的一些知识点. 11.1 实践:封装 Comm ...

  8. Computer Vision: A Modern Approach - 计算机视觉书籍阅读笔记 -第十一章 - 跟踪

    Book name : Computer Vision: A Modern Approach Book URL: https://www.academia.edu/38213969/Computer_ ...

  9. 《机器学习》周志华(西瓜书)学习笔记 第十一章 特征选择与稀疏学习

    机器学习 总目录 第十一章 特征选择与稀疏学习 11.1 子集搜索与评价 给定属性集,其中有些属性可能很关键.很有用,另一些 属性则可能没什么用.我们将属性称为"特征" (feat ...

最新文章

  1. TP,TN,FP,FN
  2. 软件测试技术学什么条件,软件测试从业者需要具备哪些技能
  3. PSVR周年庆开始,大量游戏巨幅促销
  4. C语言经典例20-小球反弹高度问题
  5. linux inode详解
  6. 成为Apache顶级项目核心贡献者是一种什么样的体验?
  7. .net core ef mysql 的使用
  8. MATLAB学习笔记(十二)
  9. n文件的上传和下载,struts2和springmvc
  10. 页面跳转报错This request has been blocked; the content must be served over HTTPS
  11. hdu4556(欧拉函数)
  12. Windows右键菜单
  13. 冒险岛 PHP,php基础知识
  14. python读取HTML文本文件
  15. 干净彻底的卸载MySQL
  16. ABI (Application Binary Interface)解析
  17. 回文数(难度系数:半颗星)
  18. 2021.01.05丨根据基因名称拼接表达量与相关注释
  19. 苹果数据线芯片IC,苹果充电线IC芯片FH152C6
  20. iOS 16 swift 横屏适配

热门文章

  1. 【方法篇】基于LC-MS/MS手段分析与MHC结合的肽序列
  2. Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码
  3. 计算机网络(第7版) - 第八章 互联网上的音频/视频服务 - 习题
  4. 百度索引是什么如何增加索引
  5. 区块链游戏公司 区块链游戏开发成本 区块链游戏开发时间
  6. INS/GNSS组合导航(三)-SINS的机械编排
  7. 服务器维修工程师面试,设备维修工程师面试内容有哪些?
  8. 基于java的量化交易软件,用户可自行编写交易策略,用于期货、股票、外汇、炒币等多种交易场景,前端采用node14 + vue2
  9. 西门子博途v16系统要求_西门子博途技术研讨
  10. VUE-flex布局之align-content多交叉轴对齐方式(6)