第十九章 播放声音
(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中播放声音
练习二:播放音乐
练习三:调节音乐和声音的音量
练习四:等待结束(get_busy方法检测)
(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声音。
问题有很多,方法也有很多,学习的过程就是不断升级打怪不是么~