Python学习笔记35:进阶篇(二十四)pygame的使用之音频文件播放
前言
基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。
我们的下一步目标是完成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 pygamepygame.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 pygamepygame.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 pygamepygame.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播放音频文件,后续学习了输入和事件监听就可以尝试进行切歌,暂停,继续播放加减音量等功能编写了。
作业
- 使用两种方式播放你喜欢的歌曲。资源不会找的话就播放我提供的两首歌曲吧!
相关文章:

Python学习笔记35:进阶篇(二十四)pygame的使用之音频文件播放
前言 基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。 我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前ÿ…...

Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测
Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM多变量时间序列预测,Transf…...

常见的点云数据的获取方式
1. 激光雷达(LiDAR) 获取方式:激光脉冲测距原理:激光雷达通过发射激光脉冲并接收反射信号来测量物体与传感器之间的距离。计算激光脉冲从发射到返回所需的时间,并将其转换为距离,从而生成三维点云数据。常…...
java 中钻石操作符 <> 的使用场景
在 Java 中,<> 符号通常被称为 "钻石操作符" (Diamond Operator),主要用于泛型类型的简化表示。<> 操作符引入于 Java 7,以减少泛型实例化时的冗余代码。以下是 <> 符号在 Java 中的几种主要使用场景:…...
C++ 定时器触发
c定时器,能够定时触发,即每隔一段固定时间执行一下函数 #include <iostream> #include <thread> #include <chrono> #include <signal.h> #include <time.h> #include <cstring> #include <glog/logging.h>#…...
【Docker 入门】
文章目录 概要 一、安装Docker CE1.1.配置阿里云镜像加速【可选】1.2.重启 二、Docker版本选择三、Docker指令1.Docker命令1.1.run1.2.start/stop/restart1.3.kill1.4.rm1.5.create1.6.ps1.7.exec1.8.top1.9.port 2.Dockerfile关键字3.镜像打包4.镜像运行5.镜像导入导出6.镜像查…...

现在有什么副业可以让人快速上岸?可以试试这个行业上岸其实不难
人为什么要努力赚銭? 当你想结婚的时候, 你可以慢慢挑,不着急。 当父母年老遭遇大病的时候, 你有机会尽孝。 当孩子需要时,你不会囊中羞涩。 年轻时以为金钱最重要, 如今年纪大了,发现这…...
每天一个数据分析题(四百二十)- 一元线性回归模型
现在通过参数估计得到一个一元线性回归模型为y 3x4,在回归系数检验中下列说法错误的是( ) A. 检验统计量是t统计量 B. 原假设是β13 C. 若拒绝原假设,就认为自变量与因变量存在显著的线性关系 D. 可以用P值与显著性水平比较结…...
day11:01文件处理
一、文件与文件模式介绍 1、什么是文件 文件是操作系统提供给用户/应用程序操作硬盘的一种虚拟的概念/接口 用户/应用程序(open()) 操作系统(文件) 计算机硬件(硬盘)2、为何要用文件 ①用户/应用程序可以通过文件将数据永久保存…...

一场夏测杀出个“双冠王”,极越01成为纯电SUV标杆
文 | AUTO芯球 作者 | 雷慢 万万没想到,懂车帝夏测运动会杀出一匹最大的黑马,竟然是极越01。 当前正在进行的懂车帝夏测运动会,在“纯电SUV/MPV续航达成率”赛事中,极越01以85.8%的续航达成率获得第一名。并且由于赛制规则限制…...
外科休克病人的护理
一、引言 休克是外科常见的危急重症之一,它是由于机体遭受强烈的致病因素侵袭后,有效循环血量锐减、组织灌注不足所引起的以微循环障碍、细胞代谢紊乱和器官功能受损为特征的综合征。对于外科休克病人的护理,至关重要。 二、休克的分类 外科休克主要分为低血容量性休克(包括…...

C-study(五).2
逻辑运算符 连接两个完整的关系表达式。 && 逻辑与,ab都为真时,a&&b的值真,其余时候假。 || 逻辑或,ab都为假时,a||b的值假,其余时候真。 ! 逻辑非、只需要一个运算对象,a真&a…...
使用Ultralytics YOLO进行模型验证
使用Ultralytics YOLO进行模型验证 使用Ultralytics YOLO进行模型验证简介为什么使用Ultralytics YOLO进行验证?验证模式的主要功能使用示例YOLO模型验证参数使用参数进行验证的示例使用Ultralytics YOLO进行模型验证 简介 验证是机器学习管道中的关键步骤,可以评估训练模型…...
MICCAI 2023 List of Papers
MICCAI 2023 - Accepted Papers, Reviews, Author Feedback List of Papers https://conferences.miccai.org/2023/papers/ • 3D Arterial Segmentation via Single 2D Projections and Depth Supervision in Contrast-Enhanced CT Images • 3D Dental Mesh Segmentation U…...
压缩文件的解析方式
一、解压缩zip格式 步骤: 1.根据压缩文件原始路径(字符串),创建源文件对象(File对象) 2.创建根目录对象,传入源文件的根目录 3.判断根目录,是否已经存在 ①如果存在,则删除; ②如果不存在,则创建根目录。 4.可以用Zip…...
rocket mq保证消息幂等性
在互联网应用中,尤其在网络不稳定的情况下,消息队列 RocketMO 的消息有可能会出现重复,这个重复简单可以概括为以下情况: 1、发送时消息重复 当一条消息已被成功发送到服务端并完成持久化,此时出现了网络闪断或者客户端宕机&…...
Elasticsearch基本操作
文章目录 1.1 索引库操作1.1.1 创建索引库 :1.1.2 删除索引库 :1.1.3 判断索引库是否存在 1.2 文档操作1.2.1 新增文档1.2.2 查询文档1.2.3 删除文档1.2.4 修改文档1.2.5 批量导入文档 1.3 RestClient查询1.3.1 普通查询1.3.2 复合条件查询1.3.3 分页排序查询1.3.4 高亮分页查询…...

设计模式探索:责任链模式
1. 什么是责任链模式 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。定义如下: 避免将一个请求的发送者与接收者耦合在一起,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求&…...
OceanBase 配置项系统变量实现及应用详解(3):新增配置项的方法
本专题的第一篇文章,配置项的定义及使用方法,详细阐述了配置项的基础用法。对于那些对源码抱有浓厚兴趣的同学来说,或许还希望深入了解配置项的实现原理,甚至渴望亲自添加新的配置项,以满足个性化的功能需求。 本文通…...

PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0
符合条件的 PCI SSC 利益相关者在 30 天的意见征询 (RFC) 期间审查 PCI PTS 硬件安全模块 (HSM) 模块化安全要求 v5.0 草案并提供反馈。 PCI PTS 硬件安全模块(HSM)模块化安全要求 v5.0图 从 7 月 8 日到 8 月 8 日,邀请符合条件的 PCI SSC 利益相关者在 30 天的意见…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...