Pygame 加载音频
Python Learning:Pygame 加载音频
Python 中自带的 winsound 模块
winsound 模块中 Beep 方法可以调用系统的蜂鸣器,接受一个为 frequency 的频率参数(范围在 37 到 36727 之间)和一个 duration 的时长参数。频率太低就难以听到。
def beep( freq, dura ):
freq = math.floor( freq )
winsound.Beep( freq, dura )
另外 winsound 还提供了对 wav 文件的播放支持,可以使用 winsound.PlaySound( sound, flags ) 播放 wav 格式的音频(仅限 wav 格式)。
pygame 模块
播放声音可以使用 pygame 模块,其中的 mixer 子模块提供了一系列播放声音的 API,使用起来非常简单。
Music 子模块
import pygame, time, os
mixer = pygame.mixer
mixer.init( 11025 )
music = mixer.music
filename = 'mountain.mp3'
def playMountain():
music.load( filename )
music.set_volume( 10 )
music.play()
while( music.get_busy() ):
time.sleep( 1 )
music.stop()
playMountain()
调用 mixer 的 init 方法进行初始化,然后获取 mixer 的 music 对象,load 方法用于加载音频文件(可以加载多种不同格式的音频文件,上述示例中加载的为 MP3 格式的文件),使用 music.play() 方法就可以开始加载音频了。
但是需要注意的是,尽管此时 music 对象确实在加载音频(music.get_busy() 返回 True),但是如果没有上述代码中的循环语句,那么在执行这个 python 文件时是不会播放音乐的。原因在于音频文件是以流的形式播放的,需要使用 time.sleep( 1 ) 延迟脚本执行时间。
mixer 中的 Sound 类
另外 pygame.mixer 中提供了 Sound 类,用于加载声音:
import pygame, time, os
mixer = pygame.mixer
mixer.init( 11025 )
music = mixer.music
path = os.path
curr_dir = path.dirname( path.abspath( __file__ ) )
def playSound( file_path ):
sound = mixer.Sound( file_path )
sound.set_volume( 5 )
channel = sound.play()
# print( sound.get_length() )
# while channel.get_busy() :
# time.sleep( 1 )
sound.stop()
try:
file_path = path.join( curr_dir, 'mountain.mp3')
playSound( file_path )
finally:
try:
file_path = path.join( curr_dir, 'mountain.wav')
playSound( file_path )
finally:
file_path = path.join( curr_dir, 'secosmic_lo.wav')
playSound( file_path )
pygame.mixer.Sound 的使用和 music 对象的使用方法类似,但是不需要设置循环也能够正常播放声音。
需要注意的是,上述代码中,mountain.mp3 是从网易云中下载的一个轻音乐文件,mountain.wav 是直接把 MP3 后缀改成 wav 后缀,sscosmic_lo.wav 是 pygame 中提供的一个示例音频。mountain.mp3 和 mountain.wav 文件的播放都失败了,只有 wav 格式的 secosmic_lo.wav 能够正常播放。可见 Sound 也只能播放 wav 格式的文件。
Reference
Pygame 加载音频的更多相关文章
- Unity3d外部加载音频,视频,图片等资源 及根据路径获取制定格式的文件
1.根据路径获取制定文件类型的文件: 这里写一个类,调用了打开路径的方法:using UnityEngine;using System;using System.Collections.Generic ...
- 加载音频Audio
var cameraAudio = new Audio(); cameraAudio.src = 'camera.wav'; // 设置音频对象的属性,预加载视频 var options_audio ...
- pygame加载中文名mp3文件出现error
好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢,最近.下面来 ...
- Cocos2D的OALSimpleAudio预加载音频
在OALSimpleAudio接口中,没有委托机制和通知机制告诉你什么时候预加载完成.也不需要这样的机制. 如下代码: //Listing 11-1. Preloading a background ...
- H5页面实现一个Audio标签加载多个音频文件,并进行播放和展示音频长度
最近微信项目中有需求,要将微信端发送过来的amr格式的语音文件,在项目中的页面上进行展示和播放,实现方式如下: 1.首先java后台收到微信端的消息推送的时候,使用 ffmpeg将amr格式的音频文件 ...
- Adobe Edge Animate –使用EdgeCommons加载和播放音频
Adobe Edge Animate –使用EdgeCommons加载和播放音频 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在Edge中,可以new一 ...
- 那些H5用到的技术(1)——素材加载
编码环境前言什么时候用到素材加载?loading提示,让用户等待图片的加载音频的加载利用神器PreloadJS总结 编码环境 Sublime Text 3 插件包括: Autoprefixer 自动补 ...
- preloadjs实现网页资源预加载
<!doctype html> <html lang="zh"> <head> <title>PreloadJS的基础使用</ ...
- 图片预先加载 preloadjs
<body><div class="loading"> <div class="progress"></div> ...
随机推荐
- Mysql避免重复插入记录方法
一.mysql replace用法 1.replace into replace into table (id,name) values('1','aa'),('2','bb') 此语句的作用是向 ...
- "ServiceStack.Redis.RedisNativeClient”的方法“get_Db”没有实现。
解决办法: 1.首先通过nuget程序包管理器将相关依赖项卸载干净 2.检查各项目模块中的package.config里还有没有redis的节点,如果已经存在就删除掉 3.去别的正常的项目中看一下re ...
- 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
Problem surface 戳我 Meaning 坐标系内有若干个点,问把这些点都圈起来的最小凸包周长. 这道题就是一道凸包的模板题啊,只要求出凸包后在计算就好了,给出几个注意点 记得检查是否有吧 ...
- cdq分治略解
前言 陌上花开,可缓缓归矣 --吴越王 寓意:意思是:田间阡陌上的花开了,你可以一边赏花,一边慢慢回来. 隐意:春天都到了,你怎么还没有回来.形容吴越王 ...
- 新建项目下的web文件夹下的dynamic web project和static web project和web fragment project的区别
dynamic web project是Eclipse的项目,与其对应的有static web project,前者指动态web项目,包含一些动态代码,如java:而static web projec ...
- C# 抽象
好多人将抽象类也作为多态的一种,其实我觉得并不是特别的好. 抽象在C#中是类的一种表现. 如果将类作为多态,那么前面所有的东西不就白费了吗? C#的 抽象很简单. 那就是抽象. 基本就是高度抽象. 那 ...
- javascript中构造器(函数)的__proto__与prototype初探
背景:最近没什么需求,快要闲出屁了,所以重温了一下js的原型,结果大有收获,且偶然看到Snandy大神的<JavaScript中__proto__与prototype的关系> 这篇文章,感 ...
- 老男孩Day18作业:后台用户管理
一.作业需求: 1.用户组的增删改查 2.用户增删该查 - 添加必须是对话框 - 删除必须是对话框 - 修改,必须显示默认值 3.比较好看的页面 二.博客地址:https://www.cnblogs. ...
- JAVA之I/O 输入输出流详解
简 介 如何在Java中进行文件的读写,Java IO流是必备的知识.这篇博文主要为您带来Java中的输入输出流的内容,包括文件编码.使用File类对文件和目录进行管理.字节流和字符流的基本操作 ...
- Qt 学习之路 2(44):QFileSystemModel
Home / Qt 学习之路 2 / Qt 学习之路 2(44):QFileSystemModel Qt 学习之路 2(44):QFileSystemModel 豆子 2013年2月21日 Qt ...