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(十八)音乐相关推荐

  1. Pygame详解(十八):mask 模块

    pygame.mask Pygame 中处理图形遮罩的模块. 函数 pygame.mask.from_surface()  --  从指定 Surface 对象中返回一个 Mask pygame.ma ...

  2. 如何用Pygame写游戏(十八)

    本文转自:http://eyehere.net/2011/python-pygame-novice-professional-18/ 3D是非常酷的技术,同时也就意味着更多的工作,上次的简单介绍之后, ...

  3. Pygame(十九)音乐播放器1

    Pygame(十九)音乐播放器1 前情提要 本节提要 界成设计 效果图 界面代码设计 # /usr/bin/python3# Author: 爱编程的章老师 # @Time: 2021/1/17 00 ...

  4. librosa | 系统实战(十八~十九)写音频音乐

    文章目录 [(一 ~ 四)librosa学习点此处](https://blog.csdn.net/qq_44250700/article/details/119685358) [(五 ~ 十七) li ...

  5. Android简易音乐重构MVVM Java版-新增推荐、雷达歌单详情列表界面(十八)

    Android简易音乐重构MVVM Java版-新增推荐.雷达歌单详情列表界面(十八) 关于 效果 修改ApiService 增加歌单列表实体类RecommendListEntity 新增歌单列表界面 ...

  6. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  7. 3年开发经验,挂在了MyBatis十八连环问上!精通MyBatis源码,有多吃香?

    在 Java 相关岗位面试中,精通 MyBatis 真的非常吃香!它专注于 SQL 自身,是一个足够灵活的 DAO层 ORM 解决方案,而 DAO层 是每个后端程序员都绕不过去的一个话题. 搞技术的人 ...

  8. 第十六讲:完美主义身心健康 第十七讲:身心健康:运动与冥想 第十八讲:睡眠,触摸和爱情的重要性

    (注:此为课程第十六课,更新于2017年6月29日) 早上好! 我们今天要把完美主义讲完,然后开始讲精神肉体(Mind and Body).这个学期对我来说挺不错的,基本上没有什么东西让我后悔做过.不 ...

  9. 十八数藏柏松:数字藏品拥有广阔的发展空间,能为社会输出更好的价值

    绕数字营销.IP孵化.创作者扶持.元宇宙应用等完整内容生态,真正赋予数字藏品更广阔的发展空间和更可持续的发展动力,为国内市场持续输出优质的藏品内容及社会价值. 近日,由中国科学院主管.科学出版社主办的 ...

最新文章

  1. boost thread 判断是否正在运行_java高端基础:Thread源码解读
  2. c-nominated = ((rcheck-use_candidate) || c-nominated);
  3. raise主动引发异常
  4. 跑不出来_内蒙古23只狍子罕见列队出没,它们是出来透透气?
  5. 如何从URL查询字符串获得/附加视图参数(示例)?
  6. 痛惜,今年已有多名杰青英年早逝!
  7. linux 的 cat more less 命令有什么区别
  8. MS CRM 2011 如何创建基于SQL的自定义报表,并使用数据预筛选(Pre-Filtering)
  9. 如何快速实现FaceTime多人视频效果
  10. 爬虫 知识点 总结。
  11. RESTful Web Service - JAX-RS Annotations
  12. Eclipse配置中文(汉化)
  13. 组态王、力控、MCGS、瑞尔、杰控等国内组态软件一点看法
  14. 【软件工程导论题型大总结】简答题总结
  15. 银行自助填表方案介绍
  16. 多元统计分析matlab,matlab与应用多元统计分析..doc
  17. 千层浪软件下载_千层浪视频软件app
  18. 工信部,映射,映射端口,热备,磁盘,虚拟磁盘,冗余,磁盘阵列技术,廉价冗余磁盘阵列 ,RAID 0,RAID1 ,RAID 3,RAID 5,RAID 6 名词解释
  19. 【C语言学习】关于 int main(int argc,char* argv[])
  20. 带色彩恢复的视网膜增强算法实现 (MATLAB版本)

热门文章

  1. 微波浅谈(一)更新中
  2. C++ map的基本和高级操作
  3. Servlet CDI Example Analysis
  4. 极验滑动验证码破解分析
  5. Java零基础系列003——变量
  6. [转载] 民兵葛二蛋——第31集
  7. 编程之美——3.1字符串移位包含问题
  8. WinFrom 中 label背景透明
  9. .net中多控件共享事件处理程序的方法
  10. [转载] python int类数据的内存大小