pygame学习笔记(4):声音控制


Posted in Python onApril 15, 2015

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()

在游戏中,往往用下面的代码来完成:
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次。第二个参数和第三个参数分别表示播放的起始和结束位置。

完整的代码为:
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。例如:
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首页上给出的例子为:

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()

Python 相关文章推荐
python 多线程应用介绍
Dec 19 Python
python连接mysql调用存储过程示例
Mar 05 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
python版本五子棋的实现代码
Dec 11 Python
python利用thrift服务读取hbase数据的方法
Dec 27 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 Python
如何在python中写hive脚本
Nov 08 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
Python的Django框架使用入门指引
Apr 15 #Python
python中xrange用法分析
Apr 15 #Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 #Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 #Python
python实现telnet客户端的方法
Apr 15 #Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 #Python
Python远程桌面协议RDPY安装使用介绍
Apr 15 #Python
You might like
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
php微信公众平台开发类实例
2015/04/01 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python操作excel的方法
2018/08/16 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Python list运算操作代码实例解析
2020/01/20 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
python操作toml文件的示例代码
2020/11/27 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
建筑设计学生的自我评价
2014/01/16 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
商超业务员岗位职责
2015/02/13 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers