Pygame学习笔记7:音频

音乐

要在游戏中播放背景音乐,可以使用pygame.mixer.music模块。

使用pygame.init()进行全部模块的初始化,或者只初始化音频部分:pygame.mixer.init()

使用文件名作为参数载入音乐

pygame.mixer.music.load(‘music.ogg’)

音乐可以是ogg、mp3等格式。载入的音乐不会全部放到内容中,而是以流的形式播放的,即在播放的时候才会一点点从文件中读取。

使用pygame.mixer.music.play()播放载入的音乐。该函数立即返回,音乐播放在后台进行。play方法还可以使用两个参数

pygame.mixer.music.play(loops=0, start=0.0)

loops和start分别代表重复的次数和开始播放的位置。

播放到一半可以使用pygame.mixer.music.stop()停止播放,还可以用pygame.mixer.music.pause()暂停播放。暂停播放的音乐可以用pygame.mixer.music.unpause()

来继续播放。使用pygame.mixer.music.fadeout(time)来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。

可以用pygame.mixer.music.set_volume(value)来设置播放的音量,音量value的范围为0.0到1.0。

要判断是否在播放音乐,可以使用pygame.mixer.music.get_busy(),返回1为正在播放。在音乐播放完成时,可以用事件的方式通知用户程序。使用pygame.mixer.music.set_endevent(pygame.USEREVENT + 1),来设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。

当前正有音乐在播放时,可以使用pygame.mixer.music.queue(filename)来指定下一个要播放的音乐文件,当前的音乐播放完成后自动开始播放指定的下一个。一次只能指定一个等待播放的音乐文件。

注意:同时只能播放一个音乐文件。音乐文件可以很大,系统以流的形式播放。

音效

要在游戏中播放碰撞、爆炸、语音等音效,需要使用pygame.mixer模块。这个模块支持同时播放多个音效文件,多个文件在多个不同的通道Channel中播放,一个通道一次只能播放一个音效文件。

使用pygame.init()进行全部模块初始化,或者只初始化音频部分pygame.mixer.init()可以这样查看总共有多少个通道pygame.mixer.get_num_channels()可以使用channel = pygame.mixer.Channel(i)取得第i个通道。或者使用channel = pygame.mixer.find_channel()

自动取得一个空闲的通道(没有音效正在播放的通道)。

使用sound = pygame.mixer.Sound(‘KDE_Startup_2.ogg)指定文件名载入一个音频文件,并创建一个Sound对象。音频文件可以是wav,ogg等格式。音频文件的内容会被全部载入到内存中。

使用channel.play(sound)在一个通道中播放一个音效。或者使用sound.play()自动找一个空闲的通道播放音效。

正在播放的音效可以使用sound.stop()停止音效sound的播放。或者用channel.stop()停止在通道channel中播放的音效。正在播放音效的通道还可以用channel.pause()暂停通道中的音效。暂停的音效还可以用channel.unpause()继续播放。使用channel.fadeout(time)来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。对于一个通道可以用channel.get_busy()检查它是否正在播放音效。

当一个通道中的音效播放完成时,可以通过事件通知给用户程序。使用channel.set_endevent(pygame.USEREVENT + 1)来设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。

使用channel.queue(sound) 为正在播放音效的通道指定下一个要播放的音效。当前的音效播放完成后,下一个音效会自动播放。一个通道只能有一个等待播放的音效。

使用channel.set_volume(value)来设置通道中播放的音效的音量。使用sound.set_volume(value)来设置单个音效的音量。两者的取值范围都是0.0到1.0。音效播放的实际音量是通道音量和音效音量的乘积,比如通道音量0.5,音效音量0.6,则实际播放的音量为0.3。

注意:音效和音乐的区别是:音效要整个文件载入到Sound对象中才能播放,而音乐不用完全载入,而以流的方式播放。