用Python和Pygame写游戏-从入门到精通(22)

537 查看

辛苦啦~ 这次是我们系统的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的判断),显示的也很简单,几个控制按钮,下面显示当前歌名(显示中文总是不那么方便的,如果你运行失败,请具体参考代码内的注释自己修改):