声音是游戏中的必要元素,可以给用户很好的体验,让我们更好的代入到游戏中,在了解声音之前,我们需要知道它是怎么产生的以及存储处理的过程
一、声音是什么
声音的本质是振动
响度:振动幅度越大,声音就越大
音调:振动的快慢,决定每秒振动次数
音色:振动的波形形状来决定
同时也要注意在传播过程中声音也会变化,比如随距离增大而响度减少,而不同环境产生的效果也会不同,而速度也会有一定的影响
(好啦,不扯远了)
二、声音存储
声音是一种模拟信号,而计算机是只能存储数字信号,故在存储之前进行数字化处理
以最常见的WAV文件为例
即把声音记录为WAV文件的形式,其实就是记录波形的每个点,在一张坐标纸中记录,而要播放的时候,还原波形就好啦,故我们可以知道坐标点越密,其还原效果就越逼真
声音文件格式 | 属性 |
---|---|
WAV | 无压缩,体积最大 |
OGG | 无损压缩,保持图像本真,比较小 |
MP3 | 有损压缩 |
三、声音初始化
首先要进行声音处理,可以录制,也可自己合成,也可自己在网上下载
故我们直接学习如何初始化声音
函数如下:
pygame.mixer.pre_init(frequency, size, stereo, buffer)
参数说明:
参数 | 描述 |
---|---|
frequency | 声音文件的采样率,尽管高采样率会降低性能,但每次的声卡可轻松对应44.1KHz的声音回放 |
size | 量化精度 |
stereo | 立体声效果 |
buffer | 缓冲大小,2的倍数 |
e.g.先设定参数,再初始化所有东西
pygame.mixer.pre_init(44100, 16 ,2 ,4096 )
pygame.init()
注意:
背景音乐比较长,故利用其它函数来实现
pygame.mixer.music来控制背景音乐的播放
四、Sound对象
初始化声音之后就可以读取一个声音文件到一个Sound对象中,
函数pygame.mixer.Sound()
可接受一个文件名
也可以是文件对象,不过文件必须是WAV或OGG
e.g.
hello_world = pygame.mixer.Sound("hello.png")
然后就可以播放
play(loop, maxtime)
参数 | 描述 |
---|---|
loop | 重复的次数(-1为无限循环,1为两次…)注意是重复次数而不是播放次数 |
maxtime | 多少毫秒后结束 |
注意:
当不调用参数时,声音只播放一次,而play调用成功,就会返回一个channel对象,否则返回none
五、channel对象
channel(声道):被声卡混合(共同)播放的数据流
channel用来设定比较有意境的声音,而若是简单播放则无需考虑
e.g.火车从左往右疾驰,则要设定先左耳道响,再相同,最后右耳道响
游戏中可共同播放的声音是有限的,pygame中限定是8个
函数pygame.mixer.get_num_channels()
来得知当前系统可以同时播放的声道数,而一旦超过,play就会返回None,
可通过set_num_channels()
来设定同时需要播放多少个声音
第七篇pygame的学习就到此结束啦!