Pygame教程系列四:播放音频篇

【前言】

      pygame播放音频文件这部分相对来说比较简单,主要是用到pygame.mixer模块,不过也有一些地方需要注意的,咱们直接先看看案例

1、案例效果图

在这里插入图片描述

2、案例代码

import pygame
from mutagen.mp3 import MP3
# 标识是否退出循环
exitFlag = False
# 设置画面刷新的帧率,即1s内刷新几次
FPS = 30
# 初始化pygame
pygame.init()
# 设置窗口标题
pygame.display.set_caption("pygame音频播放教程")
# 设置窗口大小
surface = pygame.display.set_mode((1000,500),pygame.RESIZABLE)
# 设置icon
icon = pygame.image.load('E:\AS-workspace\pygameTest\drawable\icon.png').convert_alpha()
pygame.display.set_icon(icon)
paused = False
# 获取游戏时钟
clock = pygame.time.Clock()
music1Path = r'E:\AS-workspace\pygameTest\music\music_1.mp3'
music2Path = r'E:\AS-workspace\pygameTest\music\music_2.mp3'
# 初始化音频模块
pygame.mixer.init()
# 加载音频文件
pygame.mixer.music.load(music1Path)
# 排队多个音频,依次播放
pygame.mixer.music.queue(music2Path)
# 指定播放位置,相对于当前位置,移动多少秒
# pygame.mixer.music.set_pos(5)
# 设置音量,0.0~1.0
pygame.mixer.music.set_volume(0.5)
# 开始播放
pygame.mixer.music.play(0)
# 加载mp3配置信息
audio1 = MP3(music1Path)
# 获取MP3音频文件的长度
length = audio1.info.length
print('len=',length)
# 图片缩放为指定宽高
scaleIcon = pygame.transform.scale(icon, (80, 80))
# 获取图片矩形
rect = scaleIcon.get_rect()
# 设置图片矩形的中心点坐标(x,y)
rect.center = (100,290-rect.height/2)
# 绘制到屏幕上
surface.blit(scaleIcon,rect)
# 绘制一条线
lineRect = pygame.draw.line(surface, (255, 0, 0), (100, 300), (length * 40 + rect.width, 300), 10)
newRect = None
dirtyList = []
while not exitFlag:
    clock.tick(FPS)
    dirtyList.clear()
    dirtyList.append(lineRect)
    for event in pygame.event.get():
        # 点击关闭
        if event.type == pygame.QUIT:
            exitFlag = True
        elif event.type == pygame.KEYDOWN:
            # 按下空格键
            if event.key == pygame.K_SPACE:
                if paused:
                    if pygame.mixer.get_init():
                        paused = False
                        # 恢复
                        pygame.mixer.music.unpause()
                else:
                    if pygame.mixer.get_init():
                        paused = True
                        # 暂停
                        pygame.mixer.music.pause()
            # 按下ESC键
            elif event.key == pygame.K_ESCAPE:
                if pygame.mixer.get_init():
                    # 设置音频几毫秒之后慢慢消失
                    pygame.mixer.music.fadeout(500)
            # 按下R键
            elif event.key == pygame.K_r:
                if pygame.mixer.get_init():
                    # 重新开始播放
                    pygame.mixer.music.play(0)
            # 按下E键
            elif event.key == pygame.K_e:
                if pygame.mixer.get_init():
                    # 释放资源退出
                    pygame.mixer.music.unload()
                    pygame.mixer.quit()

    # 擦除脏区域
    if newRect:
        fillRect = surface.fill((0, 0, 0), newRect)
        dirtyList.append(fillRect)
    if pygame.mixer.get_init():# 音频退出之后就会提示没初始化
        # 根据音频播放来移动图片
        newRect = rect.move(pygame.mixer.music.get_pos() * 40 / 1000.0, 0)
        dirtyList.append(newRect)
        # 绘制到屏幕
        surface.blit(scaleIcon, newRect)
    # 更新渲染新的内容到屏幕显示器
    pygame.display.update(dirtyList)

if __name__ == '__main__':
    pass

3、代码详析

1)在操作音频文件之前,一定得先初始化音频模块,调用一下代码初始化:pygame.mixer.init()

2)初始化完成之后,开始加载音频文件进来:pygame.mixer.music.load(music1Path)

3)若是需要加载多个音频文件依次播放,可以加入队列中:pygame.mixer.music.queue(music2Path)

4)可以指定音频从哪一秒开始播放:pygame.mixer.music.set_pos(2),不过我试了没效果,而且会抛出异常:pygame.error: set_pos unsupported for this codec,这个有点奇怪,因为pygame的文档明明写着是支持mp3格式的音频

5)设置音频的音量,取值是0.0~1.0:pygame.mixer.music.set_volume(0.5),测试发现没法设置加大音量,只能设置减少音量,有点鸡肋

6)开始播放音频:pygame.mixer.music.play(0),0表示不循环,-1表示无限循环,设置1表示循环一次,即一共播放两次

7)导入:from mutagen.mp3 import MP3 ,这个模块可以用来获取MP3的各种信息,比如:mp3音频文件的时长

# 加载mp3配置信息
audio1 = MP3(music1Path)
# 获取MP3音频文件的长度
length = audio1.info.length

8)获取音频文件是否已经初始化:pygame.mixer.get_init(),假如已经调用过 pygame.mixer.quit()停止音频文件的话,这个方法也是返回未初始化

9)暂停音频的播放: pygame.mixer.music.pause()

10)恢复音频的播放:pygame.mixer.music.unpause()

11)设置音频500毫秒之后慢慢停止播放:pygame.mixer.music.fadeout(500)

12)重新开始播放:pygame.mixer.music.play(),pygame文档上说用pygame.mixer.music.rewind()可以重新开始音乐,试了并没有效果

13)释放加载的音频文件资源:pygame.mixer.music.unload()

14)退出音频播放: pygame.mixer.quit()

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值