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

article/2025/10/2 20:18:15

【前言】

      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 = Trueelif 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()


http://chatgpt.dhexx.cn/article/KyETFUQs.shtml

相关文章

python3.8安装pygame_Python3.8安装Pygame教程

注:因为最近想用一下Python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步…

Pygame 教程(3):绘制图形

本章,你将学习如何在 Pygame 中绘制图形。 导航 上一章:重要的概念及对象 下一章:图像传输和绘制文本 文章目录 导航抗锯齿draw 模块实例:跟随鼠标的图形创建初始窗口添加变量捕捉鼠标事件绘制图形完整代码 结语 抗锯齿 抗锯齿…

Mac Pycharm导入Pygame教程(超细)

首先先新建一个想要使用Pygame的项目 进入项目后,点击文件(File)——新项目设置(settings) 点击新项目的偏好设置(Preferences for new project ) 随后可以看到 点击Python 编译器&#xff0…

mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解

注:因为最近想用一下python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步 安装Python和pip 如果已安装,使用python --version …

Pygame教程系列一:快速入门篇

【简介】 Pygame 是python用来开发视频游戏的游戏引擎,底层主要是SDL库实现,算是目前利用python开发小游戏的一个性能比较高的一个游戏框架 一、安装pygame 使用pip下载安装 pip install pygame二、入门案例详析 1、示例效果 2、示例代码 import os …

pygame教程3

目录 做个小游戏精灵类精灵类介绍使用精灵类 做个小游戏 这个小游戏使用了pygame教程2的知识。 #↓初始化 import pygame,sys from pygame.locals import * pygame.init()#初始化pygame。 screen pygame.display.set_mode((800,600)) pygame.display.set_caption("Hell…

pygame教程2

目录 响应键盘上的事件让画面动起来了解x轴和y轴画圆形圆形动起来 响应键盘上的事件 import pygame#导入pygame。 import sys#导入sys from pygame.locals import *#导入pygame所有的常量,方便以后使用。 pygame.init()#初始化pygame。 screen pygame.display.set…

pygame教程笔记

pygame教程 安装pygameGame Development 1-1: Getting Started with PygameGame Development 1-2: Working with SpritesGame Development 1-3: More About SpritesPygame Shmup Part 1: Player Sprite and ControlsPygame Shmup Part 2: Enemy SpritesPygame Shmup Part 3: Co…

pygame基础教程

pygame简介 pygame可以实现python游戏的一个基础包。 pygame实现窗口 初始化pygame,init()类似于java类的初始化方法,用于pygame初始化。 pygame.init() 设置屏幕,(500,400)设置屏幕初始大小为500 * 400的大小, 0和32 是比较高…

Python pygame(GUI编程)模块最完整教程(1)

提示:下滑文章左侧可以查看目录!本教程分为多篇,总目录如下。 总目录: README.md Python-ZZY/Python-Pygame最完整教程 - Gitee.com 1 初识pygame 1.1 简介 pygame是python中一个流行的GUI编程模块,是专门为了开发游…

Pygame教程(非常详细)

文章目录 教程特点阅读条件 Pygame是什么扩展知识 Pygame下载和安装1) pip包管理器安装2) 二进制安装包安装 第一个Pygame程序初始化程序创建Surface对象事件监听游戏循环 Pygame Display显示模块详解Pygame Surface创建图像Pygame Transform图像变形Pygame Time时间控制详解1)…

GeoWave0.9.8开发人员指南

GeoWave0.9.8开发人员指南 官方英文地址:http://s3.amazonaws.com/geowave/0.9.8/docs/devguide.html 介绍 什么是GeoWave GeoWave是一个开源库,用于在排序的键值数据存储和流行的大数据框架之上存储,索引和搜索多维数据。GeoWave包含特定的…

行人检测之DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变…

Xuxiang Qi--Deep Learning based Semantic Labelling of 3D Point Cloud in Visual SLAM

元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019 提出了一种建立三维密集语义地图的方法,采用GPU,ROS消息通信无法支持。 摘要 三维(3D)点云…

古老的DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变得…

OpenCV-Python (官方)中文教程(部分一)

官网链接(英文版):https://docs.opencv.org/4.1.1/d6/d00/tutorial_py_root.html 第一章. OpenCV简介 了解如何在计算机上设置OpenCV-Python! 1.OpenCV-Python教程简介 1.1 OpenCV OpenCV是由Gary Bradsky于1999年在Intel公司创建的,第一次发布是在…

【视觉SLAM十四讲】视觉里程计—特征点法

本文为视觉 SLAM 学习笔记,讲解视觉里程计中的特征点法。 本讲内容概要 图像特征的意义,在单幅及多幅图像中提取特征点。对极几何的原理,利用对极几何的约束恢复图像间相机的三维运动PnP 问题,利用已知三维结构与图像的对应关系…

【记录】一个深度学习算法工程师的成长之路( 思考和方法以及计划 )

原文链接:https://blog.csdn.net/TeFuirnever/article/details/100999282 声明: 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的…

面向动态环境基于面元的RGB-D SLAM系统

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 作者:robot L https://zhuanlan.zhihu.com/p/142175916 本文仅做学术分享,如有侵权,请联系删除。 主要内容 面向动态环境基于面元的RGB-D SLAM系统,主要内容如下…

StaticFusion

主要内容 面向动态环境基于面元的RGB-D SLAM系统,主要内容如下: 同时估计RGB-D相机位姿并分割当前帧图片中的静态像素。将当前帧像素的静态概率当做一个取值范围为 的连续变量,和位姿一起联合优化。构建静态场景的面元地图。为此&#xff…