python之pygame声音(七)

声音是游戏中的必要元素,可以给用户很好的体验,让我们更好的代入到游戏中,在了解声音之前,我们需要知道它是怎么产生的以及存储处理的过程


一、声音是什么

声音的本质是振动
响度:振动幅度越大,声音就越大
音调:振动的快慢,决定每秒振动次数
音色:振动的波形形状来决定

同时也要注意在传播过程中声音也会变化,比如随距离增大而响度减少,而不同环境产生的效果也会不同,而速度也会有一定的影响
(好啦,不扯远了)


二、声音存储

声音是一种模拟信号,而计算机是只能存储数字信号,故在存储之前进行数字化处理

以最常见的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的学习就到此结束啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值