使用pygame进行音频播放
pygame是python的一个游戏开发包可以用来开发一些简单的游戏。游戏当然少不了一些音效和背景音乐,使用pygame可以实现音频的播放和控制。文档地址
pygame音频播放使用的是pygame的混音器模块。注意:pygame在Ubuntu等Linux平台对MP3文件不支持,可以使用wav或OGG文件。
示例代码:
import pygame
#pygame.init()
pygame.mixer.init() # 初始化混音器模块(pygame库的通用做法,每一个模块在使用时都要初始化pygame.init()为初始化所有的pygame模块,可以使用它也可以单初始化这一个模块)
pygame.mixer.music.load("音乐文件位置") # 加载音乐
pygame.mixer.music.set_volume(0.5)# 设置音量大小0~1的浮点数
pygame.mixer.music.play() # 播放音频
如过你只是仅仅想要播放音乐(不是作为pygame的游戏音效)上的这段代码是不会发出任何声音的,因为音频的播放需要时间。而上面的代码没有留出音频播放的时间,可以使用time.sleep()进行延时处理或使用下面的代码。
import pygame
pygame.mixer.init()
pygame.mixer.music.load('音乐文件位置')
pygame.mixer.music.play(2)
while pygame.mixer.music.get_busy(): # 在音频播放为完成之前不退出程序
pass
pygame.mixer.music模块的函数:
- pygame.mixer.music.load() 加载音乐。参数为filename,以字符串传入音频文件地址;
- pygame.mixer.music.unload() 卸载已经加载的音乐。无参数;
- pygame.mixer.music.play() 播放加载的音乐。三个可选参数,loops循环次数(int);start开始播放时间(float)有的文件类型可能不支持(我试验过的Ubuntu环境下wav文件不支持设置)mp3文件的时间定位可能不准确;fade_ms音量渐变的时间间隔(int)我没有听出啥区别。。。;这三个参数默认为0
- pygame.mixer.music.rewind() 重新开始音乐。
- pygame.mixer.music.stop() 停止音乐播放。
- pygame.mixer.music.pause() 暂停音乐播放。
- pygame.mixer.music.unpause() 恢复暂停的音乐。
- pygame.mixer.music.fadeout() 淡出后停止音乐播放。
- pygame.mixer.music.set_volume() 设置音量。参数0~1之间的浮点数;
- pygame.mixer.music.get_volume() 获得音量。返回一个浮点数(0~1之间);
- pygame.mixer.music.get_busy() 音乐是否播放。返回一个bool类型的值(文档的说明)我实际测试返回的是0和1不过无所谓当需要传bool值是python会将1看成True0,看成False的(Ubuntu环境)。我的测试程序及结果如下:
import pygame
pygame.mixer.init()
pygame.mixer.music.load('1.wav')
pygame.mixer.music.play()
print(pygame.mixer.music.get_busy()) # 打印返回值
print(type(pygame.mixer.music.get_busy())) # 打印返回值类型
结果:
- pygame.mixer.music.set_pos() 设定位置(开始播放的位置)。参数pos(float),有的文件类型可能不支持详细见文档。
- pygame.mixer.music.get_pos() 获取音乐播放时间(注意这是已经播放的时间不是音乐时间长度)。返回播放的毫秒数;
- pygame.mixer.music.queue() 将声音文件排队以跟随当前文件(意思是在当前播放的声音后面再加上声音一次只能加一个,如果当前的声音未播放完就停止则后面加的声音也将丢失)。参数filename,以字符串传入音频文件地址;
示例:
pygame.mixer.music.load('所谓当前音频')
pygame.mixer.music.play()
pygame.mixer.music.queue('添加的音频') # 这个音频会在当前音频播放完后播放
- pygame.mixer.music.set_endevent() 播放停止时让音乐发送事件
- pygame.mixer.music.get_endevent() 获取播放停止时频道发送的事件
pyaudio播放音频
因为pyaudio在17年以后就没有更新过对于新的python版本的支持不足,我的python版本安装不上略。