转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi

pygame.mixer是一个用来处理声音的模块,其含义为“混音器”。游戏中对声音的处理一般包括制造声音和播放声音两部分,这里仅学习了播放声音部分。
1、pygame.mixer启动与初始化
pygame.mixer.init():mixer的初始化。程序中,使用时,一般放在最前面的几句代码中:
import pygame
pygame.init()
pygame.mixer.init()
2、播放声音片段wav文件
播放声音片段wav文件时,pygame.mixer使用Sound对象,格式为:
soundwav=pygame.mixer.Sound("filename.wav") #filename.wav文件名
soundwav.play()
在游戏中,往往用下面的代码来完成:

#@小五义 http://www.cnblogs.com/xiaowuyi
import pygame,sys
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode([640,480])
pygame.time.delay(1000)#等待1秒让mixer完成初始化
soundwav=pygame.mixer.Sound("filename.wav")
soundwav.play()
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()

3、播放mp3、wma、ogg音乐文件
这里只是学习了一个mp3文件,如果非windows系统,那可以试试ogg文件。播放音乐文件主要使用pygame.mixer中的music模块,主要方法为:
pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play(n,start,stop)#第一个参数为播放次数,如果是-1表示循环播放,省略表示只播放1次。第二个参数和第三个参数分别表示播放的起始和结束位置。
完整的代码为:

#@小五义 http://www.cnblogs.com/xiaowuyi
import pygame,sys
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode([640,480])
pygame.time.delay(1000)
pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play()
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()

程序在运行时,一旦开始播放音乐,就会继续做下一件事情,也就是说,如果我们要播放两首歌,那么
pygame.mixer.music.load("filename1.mp3")
pygame.mixer.music.play()
pygame.mixer.music.load("filename2.mp3")
pygame.mixer.music.play() 
这段代码运行后,就会出现两首歌同时在播放的情况。实际中,我们常常需要播放完一首,再播放另一首,这样就需要利用pygame.mixer.music.get_busy()函数来判断,如果函数返回值为True那么说明目前处于忙的状态,否则返回 False。例如:

#@小五义 http://www.cnblogs.com/xiaowuyi
import pygame,sys
pygame.init()
pygame.mixer.init()
screen=pygame.display.set_mode([640,480])
pygame.time.delay(1000)
pygame.mixer.music.load("filename.mp3")
pygame.mixer.music.play()
soundwav=pygame.mixer.Sound("filename.wav")
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
if not pygame.mixer.music.get_busy():
soundwav.play()
pygame.time.delay(5000)#等待5秒让filename.wav播放结束
sys.exit()

4、控制音量
pygame.mixer.music.set_volume()用来控制音量,取值范围为0-1.0的浮点数。0为最小值,1为最大值。
5、制作mp3播放器中遇到的问题
python+wxpython+pygame完全可以很容易方便的做出一个mp3播放器,但是在制作中遇到两个问题:
一是中文歌曲名的显示,通过搜索已经解决,加上# encoding='GBK'
二是pygame在播放mp3文件时,发现并不是所有的mp3文件都有播放,常常会出现播放声音不正确的情况,有时只是杂响。经过与python学习交流群(2)中的すeasyげ交流,すeasyげ提出位速128kbps的mp3文件可以播放,但从网上下了几个128kbps的mp3测试后,发现播放不正常的情况依然存在。不知道哪位大牛能解决这一问题,希望能把解决方法告知一下,谢谢。
因此,如果您打算写一个mp3的播放工具,python能做mp3播放的模块很多,这里,我觉得可以考虑使用mp3play模块,比较方便简单。目前版本为mp3play 0.1.15,具体下载地址为http://pypi.python.org/pypi/mp3play/。这里简单介绍一下其主要方法:
play(n,starms,endms):播放,第一个参数表示次数,第二、三个参数表示播放的起止位置,单位是毫秒。
stop(): 停止。
pause(), unpause(): 暂停和开始。
isplaying(): 判断是否正在播放,如果返回为TRUE,表示正在播放歌曲。
ispaused(): 判断是否为暂停,如果返回为TRUE,表示暂停。
seconds(): 返回mp3文件共多少秒,注意这里的单位是秒。
milliseconds(): 返回mp3文件共多少毫秒,注意这里的单位是毫秒。
mp3play首页上给出的例子为:

#@小五义 http://www.cnblogs.com/xiaowuyi
import mp3play
filename = r'C:\music.mp3'#播放c盘下的music.mp3文件
clip = mp3play.load(filename)
clip.play()
import time
time.sleep(min(30, clip.seconds()))#如果mp3文件的长度小于30少时,全部播放完,否则仅播放30秒。
clip.stop()

pygame学习笔记(4)——声音的更多相关文章

  1. pygame学习笔记(3)——时间、事件、文字

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 1.运动速率    上节中,实现了一辆汽车在马路上由下到上行驶,并使用了pygame.time.delay(200 ...

  2. PyGame学习笔记之壹

    新建窗口 代码 '''PyGame学习笔记之壹''' import pygame # 引入 PyGame 库 pygame.init() # PyGame 库初始化 screen = pygame.d ...

  3. pygame学习笔记(5)——精灵

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 据说在任天堂FC时代,精灵的作用相当巨大,可是那时候只知道怎么玩超级玛丽.魂斗罗,却对精灵一点也不知.pygame ...

  4. pygame学习笔记(1)——安装及矩形、圆型画图

    pygame是一个设计用来开发游戏的python模块,其实说白了和time.os.sys都是一样的东东.今天开始正式学习pygame,下载地址:www.pygame.org.下载后安装完成即可,在py ...

  5. pygame学习笔记

    pygame参考文档pdf版:pygame API html版 pygame API 石头剪子布的简单小游戏,待改进的地方,自适应大小.感兴趣的小伙伴可以依据get_surface()返回值(即当前窗 ...

  6. pygame学习笔记(6)——一个超级简单的游戏

    转载请注明:@小五义  http://www.cnblogs.com/xiaowuyi 学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块 ...

  7. pygame学习笔记(2)——从画点到动画

    转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 1.单个像素(画点)利用pygame画点主要有三种方法:方法一:画长宽为1个像素的正方形 #@小五义 http:/ ...

  8. PYGAME学习笔记_01

    01_使用PYGAME创建图形窗口 1.1_游戏的初始化和退出 pygame.init() 写入并初始化所有PYGAME模块,使用其他模块之前,必须先调用init方法 pygame.quit() 卸载 ...

  9. 转 pygame学习笔记(1)——安装及矩形、圆型画图

    http://www.cnblogs.com/xiaowuyi/archive/2012/06/06/2538921.html

随机推荐

  1. 柯朗微积分与数学分析习题选解(1.1 节 a)

    一直在读<陶哲轩实分析>,陶的书非常的严谨,环环相扣,但是也有个缺点就是计算性的例子和应用方面的例子太少了.所以就又找了本柯朗的<微积分与数学分析>搭配着看.柯朗的书的习题与陶 ...

  2. BZOJ2439【中山市选2011】序列

    题面 题解 设$f[i]$表示将$[1,i]$修改为递增的最小代价, $g[i]$表示将$[i,n]$修改为递减的最小代价. $L[i]$表示将$[1,i]$修改为倒$\text V$的代价 $$ \ ...

  3. 3504: [Cqoi2014]危桥

    3504: [Cqoi2014]危桥 链接 分析: 首先往返的可以转化为全是“往”,那么只要将容量除以2即可. 然后S向a1连边容量为an(除以2之前为2*an),S向a2连边容量为an,b1,b2向 ...

  4. maven的pom文件报错: must be "pom" but is "jar"

    问题 Project build error: Invalid packaging for parent POM com.test:hello-parent:0.0.1-SNAPSHOT (E:\ec ...

  5. Altium软件中Unknowpin的详细解决办法

    1.Altium软件中Unknowpin第一种原因:PCB封装缺失遗漏,直接加入对应的封装即可.点击箭头指示处的Add,接着点击OK之后,再点击图中所示处Browse...选择封装库的封装即可. 2. ...

  6. 180815-Spring之RestTemplate中级使用篇

    Spring之RestTemplate中级使用篇 前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场 ...

  7. Oracle中解析XMLType格式字段

    背景:项目从某数据交换平台获取XML数据,以Oracle的XMLType格式保存在数据库字段中,需要建立触发器.存储过程,在保存数据时解析XML字段,将数据写入其他业务表中. 参考资料:Oracle的 ...

  8. NO--19 微信小程序之scroll-view选项卡与跳转(二)

    本篇为大家介绍为何我们在最后做交互的时候,并没有使用上一篇讲的选项卡的效果.   scroll-view与跳转.gif (如无法查看图片,还请翻看上一篇!) 大家注意看,在我点击跳转后,首先能看到的是 ...

  9. 腾讯云linux+kodexplorer可道云搭建私有云盘

    kodexplorer可道云介绍KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统.致力于为用户提供安全可控.可靠易用.高扩展性的私有云解决方案.用户只需通过简单环境 ...

  10. Hyperledger Fabric CA User’s Guide——CA用户指南(一)

    Fabric CA用户指南 Hyperledger Fabric CA是一种用于Hyperledger Fabric的认证机构(CA). 它提供了如下特性: 登记身份(注册ID),或者连接到作为用户注 ...