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中内置的日志模块logging用法详解
Jul 12 Python
如何高效使用Python字典的方法详解
Aug 31 Python
Python3 模块、包调用&路径详解
Oct 25 Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
MxNet预训练模型到Pytorch模型的转换方式
May 25 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
浅析Python 字符编码与文件处理
Sep 24 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
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
跟老齐学Python之for循环语句
2014/10/02 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
物流管理毕业生自荐信
2013/10/24 职场文书
学校司机岗位职责
2013/11/14 职场文书
电脑教师的教学自我评价
2013/11/26 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
信用卡工资证明格式
2014/09/13 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2015年父亲节寄语
2015/03/23 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server