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

Pygame 加载音频的更多相关文章

  1. Unity3d外部加载音频,视频,图片等资源 及根据路径获取制定格式的文件

    1.根据路径获取制定文件类型的文件: 这里写一个类,调用了打开路径的方法:using UnityEngine;using System;using System.Collections.Generic ...

  2. 加载音频Audio

    var cameraAudio = new Audio(); cameraAudio.src = 'camera.wav'; // 设置音频对象的属性,预加载视频 var options_audio ...

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

    好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢,最近.下面来 ...

  4. Cocos2D的OALSimpleAudio预加载音频

    在OALSimpleAudio接口中,没有委托机制和通知机制告诉你什么时候预加载完成.也不需要这样的机制. 如下代码: //Listing 11-1. Preloading a background ...

  5. H5页面实现一个Audio标签加载多个音频文件,并进行播放和展示音频长度

    最近微信项目中有需求,要将微信端发送过来的amr格式的语音文件,在项目中的页面上进行展示和播放,实现方式如下: 1.首先java后台收到微信端的消息推送的时候,使用 ffmpeg将amr格式的音频文件 ...

  6. Adobe Edge Animate –使用EdgeCommons加载和播放音频

    Adobe Edge Animate –使用EdgeCommons加载和播放音频 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在Edge中,可以new一 ...

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

    编码环境前言什么时候用到素材加载?loading提示,让用户等待图片的加载音频的加载利用神器PreloadJS总结 编码环境 Sublime Text 3 插件包括: Autoprefixer 自动补 ...

  8. preloadjs实现网页资源预加载

    <!doctype html> <html lang="zh"> <head> <title>PreloadJS的基础使用</ ...

  9. 图片预先加载 preloadjs

    <body><div class="loading"> <div class="progress"></div> ...

随机推荐

  1. go的同步模型

    首先来看一段代码,这是The Go Memory Model一文中的一个例子   var a, b int   func f() {     a = 1     b = 2 } func g() { ...

  2. Jenkins忘记密码

    当Jenkins密码忘记时,可以去Jenkins的安装目录下的users\用户名_xxxxx\config.conf文件下找下找到<passwordHash></passwordHa ...

  3. spring框架所有包说明

    spring依赖的jar包如下:下面是每个jar包的说明spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet ...

  4. CLion中出现错误add_dependencies called with incorrect number of arguments解决

    出现这个错误以后我以为是IDE出现问题了,可是重新启动,打开其他的工程文件以后发现并没有这个错误,但是新建的文件却报错 然后就打开其他工程的Cmake_list.txt文件,发现最后一行是有工程文件夹 ...

  5. MVC,MVP 和 MVVM 的区别之处

    其实我一直以来,虽然做的是前端的工作,但是有一个疑问,就是什么是mvc模式,虽然大概知道,但是具体确实说不上来的的,今天,我就好好总结一下mvc ,mvp,mvvm模式的区别与相同. 1.MVC模式: ...

  6. JAVA Web从前端到后台常用框架介绍

    原博客:https://blog.csdn.net/u013142781/article/details/50922010 一.SpringMVC http://blog.csdn.net/evank ...

  7. ubuntu 18.04 修改 固定ip

    Linux(ubuntu)下固定IP的方法   写在前面,问:为什么要固定ip.答:要知道固定IP的好处多多,随意搬动,固定共享地址,不怕断网等等 首先,我们要选取一个局域网内的IP,方法如下: 1. ...

  8. C++_代码重用1-总览

    C++的主要目的是促进代码重用. 公有继承是实现这一目标的机制之一: 本身是另一个类的成员,这种方法称为包含.组合.层次化. 另一种方法是使用私有.保护继承. 通常包含.私有继承和保护继承用于实现ha ...

  9. SQL数据库“单个用户”不能访问,设置为多个用户的解决方法

    USE master; GO DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM ma ...

  10. 【算法笔记】B1037 在霍格沃茨找零钱

    1037 在霍格沃茨找零钱 (20 分) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特( ...