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对象的深拷贝和浅拷贝详解
Aug 25 Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
python实现TF-IDF算法解析
Jan 02 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
python3实现名片管理系统
Nov 29 Python
python多任务及返回值的处理方法
Jan 22 Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 Python
Python接口开发实现步骤详解
Apr 26 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
PHP 工厂模式使用方法
2010/05/18 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
window.onload使用指南
2015/09/13 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
js中Generator函数的深入讲解
2019/04/07 Javascript
深入理解Python中的元类(metaclass)
2015/02/14 Python
python中sleep函数用法实例分析
2015/04/29 Python
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python通过cython加密代码
2020/12/11 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
求职简历的自我评价怎样写好
2013/10/07 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
给朋友的道歉信
2014/01/09 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
运动会广播稿200字
2014/10/18 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
教师学期末个人总结
2015/02/13 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS