用Python和Pygame写游戏-从入门到精通(22)
admin
2023-07-31 00:37:16
0

辛苦啦~ 这次是我们系统的pygame理论学习的最后一章了,把这次的音乐播放讲完了,pygame的基础知识就全部OK了。不过作为完整的教程,只有理论讲解太过枯燥了,我随后还会加一个或更多的实践篇系列,看需要可能也会追加真3D等额外的内容。

就像上次所说的,pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。

pygame.mixer.music用来播放MP3和OGG音乐文件,不过MP3并不是所有的系统都支持(Linux默认就不支持MP3播放),所以最好还是都用Ogg文件,我们可以很容易把MP3转换为Ogg文件,自己搜一下吧。

我们使用pygame.mixer.music.load()来加载一个文件,然后使用pygame.mixer.music.play()来播放,这里并没有一个类似Music这样的类和对象,因为背景音乐一般般只要有一个在播放就好了不是么~不放的时候就用stop()方法来停止就好了,当然很自然有类似录影机上的pause()和unpause()方法。

音效和音乐方法总结

Sound对象

方法名 作用
fadeout 淡出声音,可接受一个数字(毫秒)作为淡出时间
get_length 获得声音文件长度,以秒计
get_num_channels 声音要播放多少次
get_volume 获取音量(0.0 ~ 1.0)
play 开始播放,返回一个Channel对象,失败则返回None
set_volume 设置音量
stop 立刻停止播放

Channels对象

方法名 作用
fadeout 类似
get_busy 如果正在播放,返回true
get_endevent 获取播放完毕时要做的event,没有则为None
get_queue 获取队列中的声音,没有则为None
get_volume 类似
pause 暂停播放
play 类似
queue 将一个Sound对象加入队列,在当前声音播放完毕后播放
set_endevent 设置播放完毕时要做的event
set_volume 类似
stop 立刻停止播放
unpause 继续播放

Music对象:

方法名 作用
fadeout 类似
get_endevent 类似
get_volume 类似
load 加载一个音乐文件
pause 类似
play 类似
rewind 从头开始重新播放
set_endevent 类似
set_volume 类似
stop 立刻停止播放
unpause 继续播放
get_pos 获得当前播放的位置,毫秒计

虽然很简单,不过还是提供一个例程吧,这里面音乐的播放很简单,就是上面讲过的,不过其中还有一点其他的东西,希望大家学习一下pygame中按钮的实现方法。

界面如上,运行的时候,脚本读取./MUSIC下所有的OGG和MP3文件(如果你不是Windows,可能要去掉MP3的判断),显示的也很简单,几个控制按钮,下面显示当前歌名(显示中文总是不那么方便的,如果你运行失败,请具体参考代码内的注释自己修改):

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 # -*- coding: utf-8 -*-# 注意文件编码也必须是utf-8SCREEN_SIZE = (800, 600)# 存放音乐文件的位置MUSIC_PATH = \”./MUSIC\” import pygamefrom pygame.locals import *from math import sqrtimport osimport os.path def get_music(path):     # 从文件夹来读取所有的音乐文件    raw_filenames = os.listdir(path)     music_files = []    for filename in raw_filenames:        # 不是Windows的话,还是去掉mp3吧        if filename.lower().endswith(\’.ogg\’) or filename.lower().endswith(\’.mp3\’):            music_files.append(os.path.join(MUSIC_PATH, filename)=\”alignnone\” alt=\”\” src=\”http://ww1.sinaimg.cn/mw690/0064cTs2gw1ez70t6897xj30fa0bgtaa.jpg\” width=\”550\” height=\”412\”>

就像上次所说的,pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。

pygame.mixer.music用来播放MP3和OGG音乐文件,不过MP3并不是所有的系统都支持(Linux默认就不支持MP3播放),所以最好还是都用Ogg文件,我们可以很容易把MP3转换为Ogg文件,自己搜一下吧。

我们使用pygame.mixer.music.load()来加载一个文件,然后使用pygame.mixer.music.play()来播放,这里并没有一个类似Music这样的类和对象,因为背景音乐一般般只要有一个在播放就好了不是么~不放的时候就用stop()方法来停止就好了,当然很自然有类似录影机上的pause()和unpause()方法。

音效和音乐方法总结

Sound对象

方法名 作用
fadeout 淡出声音,可接受一个数字(毫秒)作为淡出时间
get_length 获得声音文件长度,以秒计
get_num_channels 声音要播放多少次
get_volume 获取音量(0.0 ~ 1.0)
play 开始播放,返回一个Channel对象,失败则返回None
set_volume 设置音量
stop 立刻停止播放

Channels对象

方法名 作用
fadeout 类似
get_busy 如果正在播放,返回true
get_endevent 获取播放完毕时要做的event,没有则为None
get_queue 获取队列中的声音,没有则为None
get_volume 类似
pause 暂停播放
play 类似
queue 将一个Sound对象加入队列,在当前声音播放完毕后播放
set_endevent 设置播放完毕时要做的event
set_volume 类似
stop 立刻停止播放
unpause 继续播放

Music对象:

方法名 作用
fadeout 类似
get_endevent 类似
get_volume 类似
load 加载一个音乐文件
pause 类似
play 类似
rewind 从头开始重新播放
set_endevent 类似
set_volume 类似
stop 立刻停止播放
unpause 继续播放
get_pos 获得当前播放的位置,毫秒计

虽然很简单,不过还是提供一个例程吧,这里面音乐的播放很简单,就是上面讲过的,不过其中还有一点其他的东西,希望大家学习一下pygame中按钮的实现方法。

界面如上,运行的时候,脚本读取./MUSIC下所有的OGG和MP3文件(如果你不是Windows,可能要去掉MP3的判断),显示的也很简单,几个控制按钮,下面显示当前歌名(显示中文总是不那么方便的,如果你运行失败,请具体参考代码内的注释自己修改):

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 # -*- coding: utf-8 -*-# 注意文件编码也必须是utf-8SCREEN_SIZE = (800, 600)# 存放音乐文件的位置MUSIC_PATH = \”./MUSIC\” import pygamefrom pygame.locals import *from math import sqrtimport osimport os.path def get_music(path):     # 从文件夹来读取所有的音乐文件    raw_filenames = os.listdir(path)     music_files = []    for filename in raw_filenames:        # 不是Windows的话,还是去掉mp3吧        if filename.lower().endswith(\’.ogg\’) or filename.lower

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...