嘟嘟嘟——为程序加入声音吧 父与子的编程之旅 学习笔记(17)2018-10-20

第十九章 播放声音

(1)mixer——混音器

mixer是Pygame专门处理声音的模块,用pygame.mixer调用。

(2)播放声音

方法一:将声音文件直接复制到保存程序的同一个文件夹中

sound_file = "my_sound.wav"

方法二:将声音文件的位置准确地告诉Python

sound_file = "c:\Program Files\HelloWorld\sounds\my_sound.wav"

(3)启动pygame.mixer

使用mixer前,通常要对mixer模块本身进行格式化(initializate):

pygame.mixer.init()

然后我们观察需要插入的声音:

1,假如它只是一段很短的声音片段(如splat这个音效),保存为.wav文件中,我们可以使用mixer中的Sound对象来处理:

splat = pygame.mixer.Sound("splat.wav")

2,假如它是一段比较长的音乐(如bg_music这段背景乐),保存为.mp3, .wma等格式中,我们就可以使用mixer中的music模块处理:

pygame.mixer.music.load("bg_music.mp3")

pggame.mixer.music.play() *注:播放一次后停止

练习一:在Pygame中播放声音

嘟嘟嘟——为程序加入声音吧 父与子的编程之旅 学习笔记(17)2018-10-20_第1张图片

练习二:播放音乐

嘟嘟嘟——为程序加入声音吧 父与子的编程之旅 学习笔记(17)2018-10-20_第2张图片

练习三:调节音乐和声音的音量

嘟嘟嘟——为程序加入声音吧 父与子的编程之旅 学习笔记(17)2018-10-20_第3张图片

练习四:等待结束(get_busy方法检测)

嘟嘟嘟——为程序加入声音吧 父与子的编程之旅 学习笔记(17)2018-10-20_第4张图片

(4)重复播放音乐:

在mixer.music.play方法中输入重复次数,任何一个负数都视为无限循环:

pygame.mixer.music.play(3) # 循环三次

pygame.mixer.music.play(-1) # 重复播放

(5)为PyPong增加声音

1,寻找需要加声音的部分,如碰撞时发出hit_paddle的声音。这时候我们需要先在主程序中利用mixer调用“hit_paddle.wav”的声音文件,然后再碰撞检测if循环中增加hit.play()语句。

2,相同地,需要在球碰到两边墙、碰到顶边且得分、新开始一条生命、游戏结束时都加上声音的话,先在主程序中增加hit_wall, get_point, splat, new_life, bye等wav文件,再在相应的模块中增加,如在检测self.rect.left < 0这句循环的最后中增加播放hit_wall声音。

3,这里需要注意:由于球掉下画面后,其实还是在不断地循环碰撞的动作,所以有可能出现游戏已经结束了,但碰撞声还是不断地出现的情况。这时候我们可以采用几种方法:

1) 游戏结束时将球的速度设置为[0,0],阻止球的移动;

2) 检查求是否在窗底边以下,若是,则不再播放hit_wall的声音;

3) 检查done变量,若done = True,则不再播放hit_wall声音。

问题有很多,方法也有很多,学习的过程就是不断升级打怪不是么~

你可能感兴趣的:(嘟嘟嘟——为程序加入声音吧 父与子的编程之旅 学习笔记(17)2018-10-20)