pygame重新开始_Pygame(十八)音乐
Pygame(十八)音乐
没有声音的游戏是没有灵魂的.
游戏中怎么可以没有声音呢?
前情提要
本节提要
内容详情
这长长的一串,对比昨天的短小无力,感觉今天的工作是真的大.
内容详情
加载与播放
加载
pygame.mixer.music.load(filename/fileobject)
参数说明:
filename: 音乐文件的路径,可以是绝对路径,也可以是相对路径
fileobject: python文件操作句柄(不鼓励此种用法)
播放
pygame.mixer.music.play(loops = 0, start = 0.0)
参数说明:
loops: 重复播放设置,如果是-1无限重复.如果是0不重复.如果是loops>=1 则在播放一遍后复loops遍,总计loops+1遍
start: 设置播放的起点,不同的格式,设置逻辑会有区别,MP3与OGG格式的,单位是秒,MOD格式的单位是序号
注意:音乐已经在播放时,再次运行play()会中止上次的播放,重新操作
示例
# /usr/bin/python3
# Author: 爱编程的章老师# @Time: 2021/1/16 0016# E-mail: Bluesand2010@163.com
import pygameimport sysdef load_play(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\海来阿木 - 点歌的人.mp3")# 播放 不重复,从头开始 pygame.mixer.music.play()while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()
if __name__ == '__main__': load_play()
在测试的时候,记得修改文件路径.
这里为了方便,没有对文件路径单独设置变量
这里,pygame支持的文件格式有限,如果加载了不支持的格式,会报错
错误代码:
ModPlug_Load failed
加载错误
常见的支持的格式:
mp3, wav, flac
如果不加载,直接播放也会报错:
如果load ->play->load,会导致播放失效,重新加载以后,要重新播放
重复加载问题
def load_play04(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")# 播放 不重复,从头开始 pygame.mixer.music.play(-1, 10.0) pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()
if __name__ == '__main__': load_play04()
重复播放问题
# 重复播放问题def load_play05(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")# 播放 不重复,从头开始 pygame.mixer.music.play(-1, 10.0) pygame.time.delay(3000) pygame.mixer.music.play(-1, 10.0)while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()
if __name__ == '__main__': load_play05()
重复播放后面的播放命令会覆盖前一次的播放命令
重启
顾名思议:就是重新从头开始播放.会忽略play()时设置的start从头开始
pygame.mixer.music.rewind()
示例
def rewind(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")# 播放 不重复,从头开始 pygame.mixer.music.play(-1, 10.0) pygame.time.delay(5000) pygame.mixer.music.rewind()while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()if __name__ == '__main__': rewind()
停止 和 淡出停止
就是停止播放.
pygame.mixer.music.stop()
如果没有先play(),直接用stop()不会报错
def stop(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")# 播放 不重复,从头开始 pygame.mixer.music.play(-1, 10.0) pygame.mixer.music.stop()while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()
淡出停止
与停止相比,这个停止会有个淡出的过度效果
pygame.mixer.music.fadeout(time)
参数说明:
time: 淡出的时长,单位:ms
示例
def fadeout(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")# 播放 不重复,从头开始 pygame.mixer.music.play(-1, 10.0) pygame.time.delay(5000) pygame.mixer.music.fadeout(3000)while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()
暂停 和 恢复暂停
与stop()的区别是,这个可以记录暂停的时间,以便后续用恢复暂停来继续播放.不会丢失播放进度
pygame.mixer.music.pause()
恢复暂停
从暂停状态中脱离出来,比上次暂停的位置继续 播放
pygame.mixer.music.unpause()
音量
音量分设置与获取
设置音量
pygame.mixer.music.set_volume(value)
参数说明:
value:要设置的音量大小,0-1之间的浮点数,(即按百分比设置音量)
注意:这个值并不会改变系统音量的大小,只是基于系统音量,再按百分比增减音量
获取音量
pygame.mixer.music.get_volume()
返回一个0-1之间的浮点数
如果不设置,默认值是:
示例:获取音量默认值:
def valume(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\王琪-可可托海的牧羊人.flac")# 播放 不重复,从头开始 pygame.mixer.music.play(-1, 10.0) val = pygame.mixer.music.get_volume()print(val)while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()
效果图:
不知道这个值是怎么来的.
如果要对音量的大小做设置的时候,可以先自己手动初始化为1.0或者0.5 什么的,也好有个心里预期.
检测播放状态
检测音乐播放状态,当播放时,返回False当空闲时返回True
pygame.mixer.music.get_busy()
播放位置
播放位置也有设置播放位置与获取播放位置
获取播放位置
pygame.mixer.music.get_pos()
注意:
单位:ms
返回值并不是当前时间节点在整首音乐中的时长,而是从开始play以来的时长,当设置了start,这个时间等于当前的位置减去start的值以后的值
设置当前播放位置
pygame.mixer.music.set_pos(time)
参数说明:
time: 设置到,从当前播放位置开始 + time 时长后的位置开始.单位ms
注意:
不是所有格式的音乐都支持set_pos()方法,对于不支持的格式设置set_pos()会报错
set_pos()对不同的格式,处理逻辑也是不一样的.
set_pos()设置是相对位置,要想设置绝位置,可以先用rewind()一下,再调用set_pos()
播放停止时事件
播放停止时事件可分为设置事件与获取事件
获取事件:
pygame.mixer.music.get_endevent()
返回音乐播放结束时播放的事件,如果没有设置事件,则返回pygame.NOEVENT
设置事件
pygame.mixer.music.set_endevent()pygame.mixer.music.set_endevent(type)
当有参数时,可以指定事件的类型
结束事件的定义与检测使用
# 播放停止时事件def endevent(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Pygame中的声音")# 加载音乐 pygame.mixer.music.load(r"F:\MyProject\PythonCode\Python教程\Pygame教学\18声音\src\music\海来阿木 - 点歌的人.mp3")# 播放 不重复,从头开始 pygame.mixer.music.play()
MY_ENDEVENT = pygame.USEREVENT + 1 # 自定义事件类型 pygame.mixer.music.set_endevent(MY_ENDEVENT)while 1:for event in pygame.event.get():if event.type == pygame.QUIT: sys.exit()if event.type == MY_ENDEVENT: # 检测事件类型,当播放结束时,会发起这个事件print("播放结束")
这个方法的意义,在于我们可以第一时间获取到播放停止的消息,并且处理.
后记
这一节的内容比较丰富
不过,如果我们使用过一个音乐播放器的话,可以发现,这些方法基本都是一个音乐播放器的基本功能实现了.
因此,下一节,将制作一个我们自己专属的音乐播放器
pygame重新开始_Pygame(十八)音乐相关推荐
- Pygame详解(十八):mask 模块
pygame.mask Pygame 中处理图形遮罩的模块. 函数 pygame.mask.from_surface() -- 从指定 Surface 对象中返回一个 Mask pygame.ma ...
- 如何用Pygame写游戏(十八)
本文转自:http://eyehere.net/2011/python-pygame-novice-professional-18/ 3D是非常酷的技术,同时也就意味着更多的工作,上次的简单介绍之后, ...
- Pygame(十九)音乐播放器1
Pygame(十九)音乐播放器1 前情提要 本节提要 界成设计 效果图 界面代码设计 # /usr/bin/python3# Author: 爱编程的章老师 # @Time: 2021/1/17 00 ...
- librosa | 系统实战(十八~十九)写音频音乐
文章目录 [(一 ~ 四)librosa学习点此处](https://blog.csdn.net/qq_44250700/article/details/119685358) [(五 ~ 十七) li ...
- Android简易音乐重构MVVM Java版-新增推荐、雷达歌单详情列表界面(十八)
Android简易音乐重构MVVM Java版-新增推荐.雷达歌单详情列表界面(十八) 关于 效果 修改ApiService 增加歌单列表实体类RecommendListEntity 新增歌单列表界面 ...
- OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast
OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...
- 3年开发经验,挂在了MyBatis十八连环问上!精通MyBatis源码,有多吃香?
在 Java 相关岗位面试中,精通 MyBatis 真的非常吃香!它专注于 SQL 自身,是一个足够灵活的 DAO层 ORM 解决方案,而 DAO层 是每个后端程序员都绕不过去的一个话题. 搞技术的人 ...
- 第十六讲:完美主义身心健康 第十七讲:身心健康:运动与冥想 第十八讲:睡眠,触摸和爱情的重要性
(注:此为课程第十六课,更新于2017年6月29日) 早上好! 我们今天要把完美主义讲完,然后开始讲精神肉体(Mind and Body).这个学期对我来说挺不错的,基本上没有什么东西让我后悔做过.不 ...
- 十八数藏柏松:数字藏品拥有广阔的发展空间,能为社会输出更好的价值
绕数字营销.IP孵化.创作者扶持.元宇宙应用等完整内容生态,真正赋予数字藏品更广阔的发展空间和更可持续的发展动力,为国内市场持续输出优质的藏品内容及社会价值. 近日,由中国科学院主管.科学出版社主办的 ...
最新文章
- boost thread 判断是否正在运行_java高端基础:Thread源码解读
- c-nominated = ((rcheck-use_candidate) || c-nominated);
- raise主动引发异常
- 跑不出来_内蒙古23只狍子罕见列队出没,它们是出来透透气?
- 如何从URL查询字符串获得/附加视图参数(示例)?
- 痛惜,今年已有多名杰青英年早逝!
- linux 的 cat more less 命令有什么区别
- MS CRM 2011 如何创建基于SQL的自定义报表,并使用数据预筛选(Pre-Filtering)
- 如何快速实现FaceTime多人视频效果
- 爬虫 知识点 总结。
- RESTful Web Service - JAX-RS Annotations
- Eclipse配置中文(汉化)
- 组态王、力控、MCGS、瑞尔、杰控等国内组态软件一点看法
- 【软件工程导论题型大总结】简答题总结
- 银行自助填表方案介绍
- 多元统计分析matlab,matlab与应用多元统计分析..doc
- 千层浪软件下载_千层浪视频软件app
- 工信部,映射,映射端口,热备,磁盘,虚拟磁盘,冗余,磁盘阵列技术,廉价冗余磁盘阵列 ,RAID 0,RAID1 ,RAID 3,RAID 5,RAID 6 名词解释
- 【C语言学习】关于 int main(int argc,char* argv[])
- 带色彩恢复的视网膜增强算法实现 (MATLAB版本)