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

  1. 播放音乐:pygame.mixer.music
  2. StackOverFlow: Pygame, sounds don‘t play

原文地址:https://www.cnblogs.com/brifuture/p/9785789.html

时间: 2024-10-10 21:46:45

Pygame 加载音频的相关文章

IOS 多媒体加载 加载音频 AVAudioPlayer

IOS加载音频文件   需要导入#import <AVFoundation/AVFoundation.h> 1 NSString *path = [[NSBundle mainBundle] pathForResource:@"胭脂泪" ofType:@"mp3"]; //把音频文件转换成url格式 2 3 NSURL *urlStr = [NSURL fileURLWithPath:path]; 4 AVAudioPlayer * audioPlaye

pygame加载中文名mp3文件出现error

好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢.下面来谈谈pygame.mixer.music.load()加载中文名的mp3文件问题. (发表时间2017-03-30 22:45:58 原创链接http://www.cnblogs.com/dearvee/p/6649055.html) #前言: 今天刚刚做了个音乐列表,但笔者发现在指定目录mp3文件名为中

加载音频Audio

var cameraAudio = new Audio();         cameraAudio.src = 'camera.wav'; // 设置音频对象的属性,预加载视频          var options_audio = {             preload  : 'auto'         }         for(var key in options_audio){             if(options_audio.hasOwnProperty(key) &

那些H5用到的技术(1)——素材加载

编码环境前言什么时候用到素材加载?loading提示,让用户等待图片的加载音频的加载利用神器PreloadJS总结 编码环境 Sublime Text 3 插件包括: Autoprefixer 自动补全CSS ColorPicker 颜色选择器 ConvertToUTF8 转码 GBK Support 支持GBK HTML-CSS-JS Prettify 前端代码格式化 SublimeCodeIntel 最好用的自动补全 Chrome 57.0.2950.5 m 用来预览以及调试 gifcam

[译文]JOAL教程 第六课 高级加载方式与错误处理

[译文]JOAL教程 原文地址:http://jogamp.org/joal-demos/www/devmaster/lesson6.html 原文作者:Athomas Goldberg 译文:三向板砖 转载请保留以上信息. 本次课程对应的学习笔记:http://blog.csdn.net/shuzhe66/article/details/40303739 第六课 高级加载方式与错误处理 本文是DevMaster.net(http://devmaster.net/)的OpenAL教程对应的JOA

图片预先加载 preloadjs

<body><div class="loading"> <div class="progress"></div></div><img src="images/bg0.png" style="display: none"/> <img src="images/btn.png" style="display: none&qu

xcode UIImageView创建、图片加载、 音频文件播放、 延迟调用

代码创建 /** 创建UIImageView */ UIImageView * imageView=[[UIImageView alloc]init]; /** 设置尺寸位置 */ imageView.frame=(CGRect){{50,50},{230,230}}; /** 创建图片 */ UIImage * image=[[UIImage alloc]init]; /** 获取图片 */ image=[UIImage imageNamed:@"图片名称"]; /** 把图片给容器

图片,音频资源预加载和文档dom加载

在项目中遇到一个问题,ajax请求音频资源,然后动态的插入到文档中,其中.原生的音频外观实在太丑了,而且每个浏览器的样式都不一样,采取了一个audio插件. 就遇到一个问题,请求后的直接调用插件的话,资源还没有被加载,无法获取音频的总长度,所以调用后时间会显示nun; 处理的思路就是--等待音频资源加载完成后执行插件调用函数 <---图片资源-->function loadSprites(src) { var deferred = $.Deferred(); var sprite = new

iOS 设置铃声---加载音乐和音频然后进行播放

在有些应用中需要用到背景音乐和音效,那在程序中是这么实现的. 1.首先加载背景音乐需要用到AVFoundation框架 2.音乐资源都是在包里的,所以需要获得包路径,涉及方法- (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; url其实就是包地址,可以通过[[NSBundlemainBundle]pathForResource:@"背景音乐" ofType:@"caf"];获得到路