文章目录
🚴大家好!我是近视的脚踏实地,虽然近视,但是脚踏实地,这一篇来学习游戏中的播放音乐和音效,然后继续完善未完成的小游戏
(一)概念
首先几乎没有什么游戏是一声不吭的,多重的感官体验更能刺激玩家的神经,没有声音的游戏就好比 不蘸番茄的薯条,忘记带枪的战士!
尽管如此,Pygame 对于声音的处理并不是太理想,我说的是如果你想用 Pygame 做一个炫酷的音乐播放器那可能会让你失望,因为Pygame对于声音格式的支持十分有限,不过对于游戏开发来说,这完全是足够的,我们需要的我们自己转换就可以了。
一般游戏来说,声音主要分为两种,一种是背景音乐,一种是音效。
背景音乐就是时刻伴随着游戏存在的,往往就是重复播放的一首曲子或者歌曲;
音效就是在某种条件下被触发产生的,比如飞机相撞会发出爆炸的声音
Pygame 支持的声音格式十分有限,一般情况下我们使用 .ogg 的格式来做背景音乐,用无压缩的 .wvb 来作为音效。
如果是拿到了一个 .mp3 格式,可以使用格式工厂这类的软件把它转为**.ogg** 或者 .wvb 格式,
还需要注意的是music 模块虽然写了支持 .mp3 格式,但是它对 .mp3 格式的支持十分有限,经常你会在网上找到一段很好的 .mp3 的曲子,但是载入之后压根没有声音。你把它转为 .ogg 格式就可以很好的支持了。
(二)播放声音和音效
1️⃣播放音效
—pygame.mixer.Sound()
播放音效我们使用 mixer 模块,在使用之前需要先生成一个Sound对象 ,对这个Sound对象进行控制,Sound 对象 的 play() 方法就是播放音效。
—Sound对象的方法
方法 |
含义 |
play() |
播放音效 |
stop() |
停止播放 |
fadeout() |
淡出 |
set_volume() |
设置音量 |
get_volume() |
获取音量 |
get_num_channels() |
计算该音效播放了多少次 |
get_length() |
获得该音效的长度 |
get_raw() |
将该音效以二进制格式的字符串返回 |
2️⃣播放背景音乐
—pygame.mixer.music
播放背景音乐我们使用 music 模块,music 模块和 mixer 模块是紧密关联的,所以我们用 .mixer.music 他是在mixer里边的
—music模块方法
方法 |
含义 |
load() |
载入音乐 |
play() |
播放音乐 |
rewind() |
重新播放 |
stop() |
停止播放 |
pause() |
暂停播放 |
unpause() |
恢复播放 |
fadeout() |
淡出 |
set_volume() |
设置音量 |
get_volume() |
获取音量 |
get_busy() |
检测音乐流是否正在播放 |
set_pos() |
设置开始播放的位置 |
get_pos() |
获取已经播放的时间 |
queue() |
将音乐文件放入待播放列表中 |
set_endevent() |
在音乐播放完毕时发送事件 |
get_endevent() |
获取音乐播放完毕时发送的事件类型 |
(三)小试牛刀
下面先来写个例子练练手,要求是打开程序就会自动播放背景音乐bg_music.ogg,然后当你在窗口中点击鼠标左键,就会播放 winner.wav 音效,当点击鼠标右键,就会播放 loser.wav 音效;点击空格键就暂停背景音乐,再次点击就继续播放。
import pygame
import sys
from pygame.locals import *
pygame.init()
pygame.mixer.init()
pygame.mixer.music.load("bg_music.ogg")
pygame.mixer.music.set_volume(0.2)
pygame.mixer.music.play()
winner_sound = pygame.mixer.Sound("winner.wav")
winner_sound.set_volume(0.2)
loser_sound = pygame.mixer.Sound("loser.wav")
loser_sound.set_volume(0.2)
bg_size = width,height = 300,200
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption("Music Monster Demo")
pause = False
pause_image = pygame.image.load("pause.png").convert_alpha