Python:pygame游戏编程之旅六(游戏中的声音处理)
一款人性化的游戏中缺少不了声音,比如角色挂时惨叫一声,或PK时武器交锋的声音,还有就是英雄出场时的背景音乐,无不涉及到声音,本节我们就来看一下pygame中如何控制声音,下面是一个例子,但博客上传不了多媒体程序,否则就可以听到加勒比海盗中最为经典的配乐《he's a pirate》了,程序实现了通过上下方向键来控制音量大小的功能。
一、实例界面:
1、初始音量为10

2、通过上下方向键实时调整音乐声音大小:

二、实现代码:
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import sys
- import os
- import pygame
- from pygame.locals import *
- def load_image(pic_name):
- '''''
- Function:图片加载函数
- Input:pic_name 图片名称
- Output: NONE
- author: dyx1024
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-15
- '''
- #获取当前脚本文件所在目录的绝对路径
- current_dir = os.path.split(os.path.abspath(__file__))[0]
- #指定图片目录
- path = os.path.join(current_dir, 'image', pic_name)
- #加载图片
- return pygame.image.load(path).convert()
- def load_sound(soundfile_name):
- '''''
- Function:背景音乐加载函数
- Input:pic_name 音乐文件名称
- Output: NONE
- author: dyx1024
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-22
- '''
- #获取当前脚本文件所在目录的绝对路径
- current_dir = os.path.split(os.path.abspath(__file__))[0]
- #指定声音目录
- path = os.path.join(current_dir, 'sound', soundfile_name)
- return path
- def init_windows():
- '''''
- Function:窗口初始化
- Input:NONE
- Output: NONE
- author: dyx1024
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-21
- '''
- pygame.init()
- display_surface = pygame.display.set_mode((382, 407))
- pygame.display.set_caption('游戏中的音乐处理(http://blog.csdn.net/dyx1024)')
- return display_surface
- def exit_windows():
- '''''
- Function:退出处理
- Input:NONE
- Output: NONE
- author: dyx1024
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-21
- '''
- pygame.quit()
- sys.exit()
- def main():
- '''''
- Function:声音处理
- Input:NONE
- Output: NONE
- author: dyx1024
- blog:http://blog.csdn.net/dyx1024
- date:2012-04-22
- '''
- screen_surface = init_windows()
- back_image = load_image('lession6_back.jpg')
- back_music_file = load_sound('he_is_a_pirate.mp3')
- color_red = (255, 0, 0)
- color_green = (0, 255, 0)
- color_blue = (0, 0, 255)
- music_volume = 10
- #文字
- fontObj = pygame.font.Font('simkai.ttf', 20)
- volume_text = u'当前音量:%d' % music_volume
- textSurfaceObj = fontObj.render(volume_text, True, color_red)
- textRectObj = textSurfaceObj.get_rect()
- #加载背景音乐
- pygame.mixer.music.load(back_music_file)
- pygame.mixer.music.set_volume(music_volume/100.0)
- #循环播放,从音乐第30秒开始
- pygame.mixer.music.play(-1, 30.0)
- while True:
- #绘图
- screen_surface.blit(back_image, (0, 0))
- screen_surface.blit(textSurfaceObj, textRectObj)
- for event in pygame.event.get():
- if event.type == QUIT:
- #停止音乐播放
- pygame.mixer.music.stop()
- exit_windows()
- if event.type == pygame.KEYDOWN:
- #通过上向键来控制音量
- if event.key == pygame.K_UP:
- music_volume += 10
- if (music_volume > 100):
- music_volume = 0
- if event.key == pygame.K_DOWN:
- music_volume -= 10
- if (music_volume < 0):
- music_volume = 100
- #设置音量
- pygame.mixer.music.set_volume(music_volume / 100.0)
- #显示音量
- volume_text = u'当前音量:%d' % music_volume
- textSurfaceObj = fontObj.render(volume_text, True, color_red)
- textRectObj = textSurfaceObj.get_rect()
- pygame.display.update()
- if __name__ == '__main__':
- main()
三、关键知识点介绍:
声音处理使用pygame.mixer.music模块,其提供丰富的方法,如下:
- pygame.mixer.music.load
- 说明:加载音乐文件
- 原型:pygame.mixer.music.load(filename): return None
- pygame.mixer.music.play
- 说明:播放音乐
- 原型:pygame.mixer.music.play(loops=0, start=0.0): return None,
- 其中loops表示循环次数,如设置为-1,表示不停地循环播放;如loops = 5,
- 则播放5+1=6次,start参数表示从音乐文件的哪一秒开始播放,设置为0表示从开始完整播放
- pygame.mixer.music.rewind
- 说明:重新播放
- 原型:pygame.mixer.music.rewind(): return None
- pygame.mixer.music.stop
- 说明:停止播放
- 原型:pygame.mixer.music.stop(): return None
- pygame.mixer.music.pause
- 说明:暂停
- 原型pygame.mixer.music.pause(): return None
- 可通过pygame.mixer.music.unpause恢复播放
- pygame.mixer.music.unpause
- 说明:恢复播放
- 原型:pygame.mixer.music.unpause(): return None
- pygame.mixer.music.fadeout
- 说明:暂停指定的时间,然后接着播放
- 原型:pygame.mixer.music.fadeout(time): return None,
- 单位为毫秒
- pygame.mixer.music.set_volume
- 说明:设置音量
- 原型:pygame.mixer.music.set_volume(value): return None
- 取值0.0~1.0
- pygame.mixer.music.get_volume
- 说明:获取音量
- 原型:pygame.mixer.music.get_volume(): return value
- pygame.mixer.music.get_busy
- 说明:判断当前是否有音乐在播放
- 原型:pygame.mixer.music.get_busy(): return bool
- pygame.mixer.music.get_pos
- 说明:获取当前播放了多长时间
- 原型:pygame.mixer.music.get_pos(): return time
- pygame.mixer.music.queue
- 说明:将其他音乐文件放入播放队列,当前音乐播放完成后,自动播放队列中其他的音乐文件
- pygame.mixer.music.set_endevent
- 说明:播放完成后的事件通知
- 原型:pygame.mixer.music.set_endevent(): return None
- pygame.mixer.music.set_endevent(type): return None
- pygame.mixer.music.get_endevent
- 说明:获取播放完成后的事件,如果没有,返回pygame.NOEVENT.
- 原型:pygame.mixer.music.get_endevent(): return type
Python:pygame游戏编程之旅六(游戏中的声音处理)的更多相关文章
- 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...
- 【python游戏编程之旅】第七篇---pygame中的冲突检测技术
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs ...
- 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/ ...
- 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...
- 【python游戏编程之旅】第三篇---pygame事件与设备轮询
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame中的IO.数据http://www.cnblogs.com/msxh/ ...
- 【python游戏编程之旅】第二篇--pygame中的IO、数据
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...
- 【python游戏编程之旅】第一篇---初识pygame
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...
- 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...
- 【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接 ...
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...
随机推荐
- ASP.NET Core Library – ImageSharp
前言 2021 年就写过一篇了, Asp.net core 学习笔记 Image processing (ImageSharp), 只是那时还是旧的写法, 这篇作为翻新和以后继续增加新功能的介绍. I ...
- 从零开始掌握 Kubernetes:Pod 和 Deployment 的幕后故事
1. 引言 在如今的技术世界中,随着微服务架构的广泛应用和云原生理念的兴起,应用程序的开发.部署和管理发生了翻天覆地的变化.容器技术的出现使得开发者可以轻松地将应用及其所有依赖打包在一个轻量级.可移植 ...
- 【赵渝强老师】什么是PL/SQL?
一.什么是PL/SQL? PL/SQL(Procedure Language/SQL)是oracle在标准的sql语言上的扩展.ql/sql不仅允许嵌入sql语言,还可以定义变量和常量,允许私用条件语 ...
- 智慧矿山IT智能运维自动化解决方案
矿山企业是国民经济中的重要组成部分,其资源开发和产业链条中涉及的环节与过程非常繁琐和复杂.随着我国矿山企业规模逐年扩大,为了提高其生产效率和降低其生产成本,信息化.数字化建设成为当下矿山企业发展的重要 ...
- 自己动手,通过源码找回 Ant-Design-Blaozr 中 Tree 组件的搜索筛选效果
最近更新一个Blazor server的项目,顺带把用到的Ant-Design-Blazor 升级到了最新的 0.14.4,结果发现之前在 0.8.4 版本中 Tree 组件的搜索显示效果变了,从仅显 ...
- Nuxt.js 应用中的 page:finish 钩子详解
title: Nuxt.js 应用中的 page:finish 钩子详解 date: 2024/10/9 updated: 2024/10/9 author: cmdragon excerpt: pa ...
- 03 Transformer 中的多头注意力(Multi-Head Attention)Pytorch代码实现
3:20 来个赞 24:43 弹幕,是否懂了 QKV 相乘(QKV 同源),QK 相乘得到相似度A,AV 相乘得到注意力值 Z 第一步实现一个自注意力机制 自注意力计算 def self_attent ...
- SQL语法-列的新增、删除
MySQL的语法: 新增列 ALTER TABLE `xxdb`.`xxtable` ADD COLUMN `xx_flag` varchar(1) NULL; 删除列 ALTER TABLE `xx ...
- 一文搞懂SaaS应用架构:应用服务、应用结构、应用交互设计
大家好,我是汤师爷~ 今天系统性地聊聊SaaS应用架构设计. 应用架构概述 我们已经完成了SaaS系统的定位分析,明确了系统的目标和核心能力.这为接下来的应用架构设计奠定了基础. 应用架构就像整个Sa ...
- python+ffmpeg视频转码转格式
本文转发来自:https://blog.csdn.net/KH_FC/article/details/115771126 废话 python目前自己也是在学习当中,对python也不是特别精通,写视频 ...