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

一、实例界面:

1、初始音量为10

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

二、实现代码:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import sys
  4. import os
  5. import pygame
  6. from pygame.locals import *
  7. def load_image(pic_name):
  8. '''''
  9. Function:图片加载函数
  10. Input:pic_name 图片名称
  11. Output: NONE
  12. author: dyx1024
  13. blog:http://blog.csdn.net/dyx1024
  14. date:2012-04-15
  15. '''
  16. #获取当前脚本文件所在目录的绝对路径
  17. current_dir = os.path.split(os.path.abspath(__file__))[0]
  18. #指定图片目录
  19. path = os.path.join(current_dir, 'image', pic_name)
  20. #加载图片
  21. return pygame.image.load(path).convert()
  22. def load_sound(soundfile_name):
  23. '''''
  24. Function:背景音乐加载函数
  25. Input:pic_name 音乐文件名称
  26. Output: NONE
  27. author: dyx1024
  28. blog:http://blog.csdn.net/dyx1024
  29. date:2012-04-22
  30. '''
  31. #获取当前脚本文件所在目录的绝对路径
  32. current_dir = os.path.split(os.path.abspath(__file__))[0]
  33. #指定声音目录
  34. path = os.path.join(current_dir, 'sound', soundfile_name)
  35. return path
  36. def init_windows():
  37. '''''
  38. Function:窗口初始化
  39. Input:NONE
  40. Output: NONE
  41. author: dyx1024
  42. blog:http://blog.csdn.net/dyx1024
  43. date:2012-04-21
  44. '''
  45. pygame.init()
  46. display_surface = pygame.display.set_mode((382, 407))
  47. pygame.display.set_caption('游戏中的音乐处理(http://blog.csdn.net/dyx1024)')
  48. return display_surface
  49. def exit_windows():
  50. '''''
  51. Function:退出处理
  52. Input:NONE
  53. Output: NONE
  54. author: dyx1024
  55. blog:http://blog.csdn.net/dyx1024
  56. date:2012-04-21
  57. '''
  58. pygame.quit()
  59. sys.exit()
  60. def main():
  61. '''''
  62. Function:声音处理
  63. Input:NONE
  64. Output: NONE
  65. author: dyx1024
  66. blog:http://blog.csdn.net/dyx1024
  67. date:2012-04-22
  68. '''
  69. screen_surface = init_windows()
  70. back_image = load_image('lession6_back.jpg')
  71. back_music_file = load_sound('he_is_a_pirate.mp3')
  72. color_red = (255, 0, 0)
  73. color_green = (0, 255, 0)
  74. color_blue  = (0, 0, 255)
  75. music_volume = 10
  76. #文字
  77. fontObj = pygame.font.Font('simkai.ttf', 20)
  78. volume_text = u'当前音量:%d' % music_volume
  79. textSurfaceObj = fontObj.render(volume_text, True, color_red)
  80. textRectObj = textSurfaceObj.get_rect()
  81. #加载背景音乐
  82. pygame.mixer.music.load(back_music_file)
  83. pygame.mixer.music.set_volume(music_volume/100.0)
  84. #循环播放,从音乐第30秒开始
  85. pygame.mixer.music.play(-1, 30.0)
  86. while True:
  87. #绘图
  88. screen_surface.blit(back_image, (0, 0))
  89. screen_surface.blit(textSurfaceObj, textRectObj)
  90. for event in pygame.event.get():
  91. if event.type == QUIT:
  92. #停止音乐播放
  93. pygame.mixer.music.stop()
  94. exit_windows()
  95. if event.type == pygame.KEYDOWN:
  96. #通过上向键来控制音量
  97. if event.key == pygame.K_UP:
  98. music_volume += 10
  99. if (music_volume > 100):
  100. music_volume = 0
  101. if event.key == pygame.K_DOWN:
  102. music_volume -= 10
  103. if (music_volume < 0):
  104. music_volume = 100
  105. #设置音量
  106. pygame.mixer.music.set_volume(music_volume / 100.0)
  107. #显示音量
  108. volume_text = u'当前音量:%d' % music_volume
  109. textSurfaceObj = fontObj.render(volume_text, True, color_red)
  110. textRectObj = textSurfaceObj.get_rect()
  111. pygame.display.update()
  112. if __name__ == '__main__':
  113. main()

三、关键知识点介绍:

声音处理使用pygame.mixer.music模块,其提供丰富的方法,如下:

  1. pygame.mixer.music.load
  2. 说明:加载音乐文件
  3. 原型:pygame.mixer.music.load(filename): return None
  4. pygame.mixer.music.play
  5. 说明:播放音乐
  6. 原型:pygame.mixer.music.play(loops=0, start=0.0): return None,
  7. 其中loops表示循环次数,如设置为-1,表示不停地循环播放;如loops = 5,
  8. 则播放5+1=6次,start参数表示从音乐文件的哪一秒开始播放,设置为0表示从开始完整播放
  9. pygame.mixer.music.rewind
  10. 说明:重新播放
  11. 原型:pygame.mixer.music.rewind(): return None
  12. pygame.mixer.music.stop
  13. 说明:停止播放
  14. 原型:pygame.mixer.music.stop(): return None
  15. pygame.mixer.music.pause
  16. 说明:暂停
  17. 原型pygame.mixer.music.pause(): return None
  18. 可通过pygame.mixer.music.unpause恢复播放
  19. pygame.mixer.music.unpause
  20. 说明:恢复播放
  21. 原型:pygame.mixer.music.unpause(): return None
  22. pygame.mixer.music.fadeout
  23. 说明:暂停指定的时间,然后接着播放
  24. 原型:pygame.mixer.music.fadeout(time): return None,
  25. 单位为毫秒
  26. pygame.mixer.music.set_volume
  27. 说明:设置音量
  28. 原型:pygame.mixer.music.set_volume(value): return None
  29. 取值0.0~1.0
  30. pygame.mixer.music.get_volume
  31. 说明:获取音量
  32. 原型:pygame.mixer.music.get_volume(): return value
  33. pygame.mixer.music.get_busy
  34. 说明:判断当前是否有音乐在播放
  35. 原型:pygame.mixer.music.get_busy(): return bool
  36. pygame.mixer.music.get_pos
  37. 说明:获取当前播放了多长时间
  38. 原型:pygame.mixer.music.get_pos(): return time
  39. pygame.mixer.music.queue
  40. 说明:将其他音乐文件放入播放队列,当前音乐播放完成后,自动播放队列中其他的音乐文件
  41. pygame.mixer.music.set_endevent
  42. 说明:播放完成后的事件通知
  43. 原型:pygame.mixer.music.set_endevent(): return None
  44. pygame.mixer.music.set_endevent(type): return None
  45. pygame.mixer.music.get_endevent
  46. 说明:获取播放完成后的事件,如果没有,返回pygame.NOEVENT.
  47. 原型:pygame.mixer.music.get_endevent(): return type

Python:pygame游戏编程之旅六(游戏中的声音处理)的更多相关文章

  1. 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  2. 【python游戏编程之旅】第七篇---pygame中的冲突检测技术

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs ...

  3. 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/ ...

  4. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

  5. 【python游戏编程之旅】第三篇---pygame事件与设备轮询

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame中的IO.数据http://www.cnblogs.com/msxh/ ...

  6. 【python游戏编程之旅】第二篇--pygame中的IO、数据

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...

  7. 【python游戏编程之旅】第一篇---初识pygame

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...

  8. 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...

  9. 【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接 ...

  10. D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建

    说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...

随机推荐

  1. idea 的Tomcat 的简单配置

    不限速网盘下载: https://kohler.lanzouv.com/iSSfc0akw3vc 官网下载: https://tomcat.apache.org/download-80.cgi 正常解 ...

  2. vue导出word文档

    具体需求 在我的疫情可视化项目中有一个功能需要导出word文档,在页面点击按钮后处理数据生成word文件,然后自动下载文档. 实现步骤 多番查询后发现前端导出word,使用docxtemplater较 ...

  3. spark 新建一个column并用另一column的最大值赋值

    finalDF.withColumn("NEW_COLUMN", max("start_date").over()).show()   Ref: https:/ ...

  4. 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现

    高并发场景:秒杀商品. 秒杀一般出现在商城的促销活动中,指定了一定数量(比如:1000个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功. 示例 ...

  5. CSS – Media Query

    前言 Media Query 是用来做 RWD 的, 类似 JS 的 if else. 写的多有伤管理, 所以要谨慎使用哦. 参考: Learn CSS Media Query In 7 Minute ...

  6. 暑假集训PVZ提高模拟9

    没关 exe 让这货挂了一天 UPD:又挂了一晚上,现在被我正义制裁了 A.大众点评 交互红题啊,交互会写,但是忘记判 \(n=1\) 了 这个题交互库函数实现起来还是挺简单的,我 Windows 不 ...

  7. Readme3.0 Final

    Download Using 解压后放于不明显的地方 打开Devc++,点击 工具 > 编译选项 > 目录,在 C包含文件 与 C++包含文件 中复制完整路径并添加 选中刚添加的路径后,点 ...

  8. Response状态码

    1.数据是否正常 2.文件是否存在 3.地址自动跳转 4.服务提供错误 注:容错处理识别 •-1xx:指示信息-表示请求已接收,继续处理. •-2xx:成功-表示请求已经被成功接收.理解.接受. •- ...

  9. 【解题报告】P8477 「GLR-R3」春分

    P8477 「GLR-R3」春分 题目看起来比较魔怔,考虑怎么搞一下. 首先,一个最简单的想法,每对溶液组都配一个板子,可以用 \(n^2\) 个板子解决,看得出来很不优啊,但是可以得到 Sub1 的 ...

  10. Nuxt.js 应用中的 app:mounted 钩子详解

    title: Nuxt.js 应用中的 app:mounted 钩子详解 date: 2024/10/5 updated: 2024/10/5 author: cmdragon excerpt: ap ...