近日,在梳理pygame模块的时候发现一个很有用的模块mixer模块,这个模块翻译过来就是混音器,它可以加载和播放音频文件,甚至可以对混音器进行设置和处理,其功能非常强大。今天,我们一起来梳理一下混音器的用法,并使用这个混音器中的music类对一段MP3文件进行播放测试。
mixer混音器播放mp3文件
mixer类
mixer类是pygame中用于加载和播放声音的模块,游戏中这个模块作用很重要哦。mixer类有下面的方法,我们逐一进行解释说明,如下图所示。
mixer混音器类的方法汇总
使用混音器类时,必须注意以下事项:
使用之前需要进行初始化操作,否则会提示异常。初始化方法为:pygame.mixer.init()。当然,可以使用get_init()方法来判断初始化是否成功。混音器模块的声音播放通道数量是有限的。一般情况下,程序会告诉pygame开始播放音频,它会自动选择一个可用的频道。默认mixer有8个同步通道,自定义的混合通道可以精准控制。声音的播放一般是混合后由后台线程执行。开始播放声音对象时,它将在声音继续播放时立即返回。当然了,单个声音对象也可以主动循环多次进行播放。混音器有一个特殊的流通道。这个流通道用于音频播放,它可以通过pygame.mixer.music模块访问,以控制流式音频模块。pygame无法执行声音的重采样。pygame将控制播放速率和样本大小的参数默认设置为合理的值,以匹配音频资源的相关参数。mixer类的初始化参数
mixer的初始化函数定义如下:
初始化混音器模块以加载和播放声音。可以重写默认参数以提供特定的音频混合,也可以接受关键字参数自定义混音信息。对于参数设置为零的向后兼容性,使用默认值(可能由pre_init调用更改)。
init(frequency=22050, size=-16, channels=2, buffer=4096, devicename=None, allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE)
函数返回值为None
mixer混音器类的初始化
size:表示每个音频样本使用多少位,如果该值为负值,则将使用带符号的样本值。正值表示将使用无符号音频样本。无效值引发异常。
channels:用于指定是使用单声道还是立体声。单声道1个,立体声2个。
buffer:控制混音器中使用的内部采样数。对于大多数情况,默认值应该有效。它可以降低以减少延迟,但声音可能会丢失。它可以提高到更大的值,以确保播放不会跳过,但它会对声音播放造成延迟。缓冲区大小必须是2的幂(如果不是,则四舍五入到下一个最接近的2的幂)。
allowedChanges:匹配不同的硬件支持。当其为0时,它将在运行时转换示例以匹配硬件支持的内容。例如,声卡可能不支持16位声音样本,因此它将在内部使用8位样本。如果提供了音频允许格式更改,则请求的格式将更改为SDL2支持的最接近的格式。
硬件匹配参数有下面几种选项
硬件属性设置
AUDIO_ALLOW_FREQUENCY_CHANGEAUDIO_ALLOW_FORMAT_CHANGEAUDIO_ALLOW_CHANNELS_CHANGEAUDIO_ALLOW_ANY_CHANGE
对于混音器类,mixer提供的参数是比较全面的,但是对于小白来说使用混音器类播放一段音频文件主要使用两个类sound或music。它们也提供了具体的控制播放的方法和相关参数。下面我们梳理一下。
Sound类详解
该类的主要作用是:从文件或缓冲区对象创建新的声音对象。上面也讲过,Sound类主要播放的声音对象是ogg或者wav格式的声音对象。它接收一个声音对象,该对象可以是文件名、文件对象、buffer对象等,它提供的方法有下面几个:
Sound类参数详解
play:播放声音
stop:停止播放声音
fadeout:淡出后停止声音播放
set_volume:设置此声音的播放音量
get_volume:获取播放音量
get_num_channels:数一数这个声音播放了多少次
get_length:获取声音的长度
get_raw:返回声音样本的字节字符串副本
对于music也提供了上述方法。下面我们通过一个例子来展示使用pygame播放MP3文件。
使用pygame播放MP3文件
具体代码如下图所示。
播放MP3文件源代码
程序执行后弹出窗体开始播放MP3文件(time.sleep(200)后结束)。感兴趣的朋友们可以输入源代码测试下,mixer功能很强大,大家可以根据这个制作一个专属于自己的播放器哦,要知道Python是一门跨平台的语言,播放器完成后,随处可以播放的,可以放在自己的树莓派里,怎么样?是不是很酷?后续和大家一起做一个……
本文只是对mixer混合器类的常用属性及操作进行了梳理,还有更多用途等待大家发现哦,欢迎大家留言讨论。
转载请注明出处(百家号:Python高手养成)