前言
基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。
我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame
模块。
私信我发送消息python资料,领取python crash course
中文版PDF。
pygame
Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。
音频
游戏中必不可少的就是游戏的BGM了,有的游戏对话的时候除了文字甚至还有对话内容的语音。这些音频的功能,pygame当然也是提供的。
在pygame中,提供音频功能的模块主要有两个:pygame.mixer 和 pygame.sndarray 。接下来我们就对这两个模块进行学习。
pygame.mixer
pygame.mixer 模块是 Pygame 中用于处理音频的部分,它主要分为两个子模块:Sound 和 Music。
需要注意Pygame 默认支持 .wav 和 .ogg 格式。对于 .mp3 或其他格式,你可能需要额外的解码器。
文章上方提供一个.wav格式的文件,可以直接使用,后续有空出个教程安装解码器,可以播放MP3文件。
资源寻找的话我是在wav吧通过百度网盘下载的,当然大家也可以百度查询一下其他资源获取方式也没关系。
pygame.mixer.Sound
pygame.mixer.Sound 类用于处理短音频片段,比如游戏中的音效。
-
创建一个sound对象。
pygame.mixer.Sound(file=None, buffer=None)- 参数:
- file: 字符串,指定音频文件的路径。
- buffer: 字节对象,包含音频数据的缓冲区。
- 返回值:sound对象
- 参数:
import pygame
pygame.init()
pygame.mixer.init()
# 没啥用的窗口,单纯为了关闭窗口退出音乐播放
screen = pygame.display.set_mode((1200, 800))
# 创建 Sound 对象
sound_effect = pygame.mixer.Sound('叶倩文 - 情人知己.wav')
sound_effect.play()
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
文件执行,马上就能听到情人知己这首经典粤语歌曲了!
还有几个函数也讲一下,但是这里不进行单独的示例,因为其他函数的功能,可能要学会了输入以后,通过按键的方式来进行会体验好一点。
-
play(loops=0, maxtime=0, fade_ms=0): 播放声音。学会按键输入和事件监听以后,可以通过空格来控制音乐播放和暂停。
- loops: 整数,循环次数(默认不循环)。
- maxtime: 整数,最大播放时间(单位:毫秒)。
- fade_ms: 整数,淡入时间(单位:毫秒)。
-
stop(): 停止播放声音。学会按键输入和事件监听以后,可以通过空格来控制音乐播放和暂停。
-
fadeout(time) 在指定时间内淡出声音。
- time: 整数,淡出时间(单位:毫秒)。
-
set_volume(value): 设置音量。学会按键输入和事件监听以后,可以通过上下按钮来控制音量的加减。
- value: 浮点数,音量值(范围:0.0 到 1.0)。
-
get_num_channels(): 返回声音对象使用的通道数。
-
get_volume(): 获取音量。
-
get_length(): 返回声音的长度(单位:秒)。
pygame.mixer.music
用于处理背景音乐,通常可以播放较长的音频文件。
- load(filename): 加载音乐文件。
- filename: 字符串,音乐文件的路径。
和sound不一样,sound可以显式的进行使用,music没有返回对象,可以简单理解为设置的默认音频对象。
import pygame
pygame.init()
pygame.mixer.init()
# 没啥用的窗口,单纯为了关闭窗口退出音乐播放
screen = pygame.display.set_mode((1200, 800))
# 加载音乐
pygame.mixer.music.load('叶倩文 - 情人知己.wav')
# 循环播放
pygame.mixer.music.play(loops=-1) # 循环播放
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
执行上述代码,同样发现电脑会进行情人知己的播放,根据设置的参数,大家耐心听完会循环进行播放。
除了加载和播放的函数,music还提供了一些其他函数用于实现音频的暂停,停止,继续播放等功能。
当然这些功能还是要在学会输入和监听事件后,配合使用体验效果会好点。
- play(loops=0, start=0.0): 开始播放音乐。
- loops: 整数,循环次数(默认不循环)。
- start: 浮点数,开始播放的位置(单位:秒)。
- stop(): 停止播放音乐。
- pause(): 暂停播放音乐。
- unpause(): 继续播放音乐。
- fadeout(time) 在指定时间内淡出音乐。
- time: 整数,淡出时间(单位:毫秒)。
- set_volume(value): 设置音量。
- value: 浮点数,音量值(范围:0.0 到 1.0)。
- get_volume(): 获取音量。
- queue(song, loops=0, start=0.0): 将一首歌加入队列,当前歌曲结束后播放。
- song: 字符串,音乐文件的路径。
- loops: 整数,循环次数(默认不循环)。
- start: 浮点数,开始播放的位置(单位:秒)。
queue函数可以单独试验一下。
import pygame
pygame.init()
pygame.mixer.init()
# 没啥用的窗口,单纯为了关闭窗口退出音乐播放
screen = pygame.display.set_mode((1200, 800))
# 加载音乐
pygame.mixer.music.load('叶倩文 - 情人知己.wav')
# 加入队列
pygame.mixer.music.queue('容祖儿-小小.wav')
# 循环播放
pygame.mixer.music.play() # 循环播放
# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
耐心听完情人知己,后台播放出了小小这首歌曲。
怎么样,是不是有点音乐播放器的感觉了。
Python的魅力不仅于此哦!
结尾
关于音频的学习就先到这里,主要介绍一下怎么使用pygame播放音频文件,后续学习了输入和事件监听就可以尝试进行切歌,暂停,继续播放加减音量等功能编写了。
作业
- 使用两种方式播放你喜欢的歌曲。资源不会找的话就播放我提供的两首歌曲吧!