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 类用于处理短音频片段,比如游戏中的音效。

  1. 创建一个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()

在这里插入图片描述

文件执行,马上就能听到情人知己这首经典粤语歌曲了!

还有几个函数也讲一下,但是这里不进行单独的示例,因为其他函数的功能,可能要学会了输入以后,通过按键的方式来进行会体验好一点。

  1. play(loops=0, maxtime=0, fade_ms=0): 播放声音。学会按键输入和事件监听以后,可以通过空格来控制音乐播放和暂停。

    • loops: 整数,循环次数(默认不循环)。
    • maxtime: 整数,最大播放时间(单位:毫秒)。
    • fade_ms: 整数,淡入时间(单位:毫秒)。
  2. stop(): 停止播放声音。学会按键输入和事件监听以后,可以通过空格来控制音乐播放和暂停。

  3. fadeout(time) 在指定时间内淡出声音。

    • time: 整数,淡出时间(单位:毫秒)。
  4. set_volume(value): 设置音量。学会按键输入和事件监听以后,可以通过上下按钮来控制音量的加减。

    • value: 浮点数,音量值(范围:0.0 到 1.0)。
  5. get_num_channels(): 返回声音对象使用的通道数。

  6. get_volume(): 获取音量。

  7. get_length(): 返回声音的长度(单位:秒)。

pygame.mixer.music

用于处理背景音乐,通常可以播放较长的音频文件。

  1. 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还提供了一些其他函数用于实现音频的暂停,停止,继续播放等功能。

当然这些功能还是要在学会输入和监听事件后,配合使用体验效果会好点。

  1. play(loops=0, start=0.0): 开始播放音乐。
    • loops: 整数,循环次数(默认不循环)。
    • start: 浮点数,开始播放的位置(单位:秒)。
  2. stop(): 停止播放音乐。
  3. pause(): 暂停播放音乐。
  4. unpause(): 继续播放音乐。
  5. fadeout(time) 在指定时间内淡出音乐。
    • time: 整数,淡出时间(单位:毫秒)。
  6. set_volume(value): 设置音量。
    • value: 浮点数,音量值(范围:0.0 到 1.0)。
  7. get_volume(): 获取音量。
  8. 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播放音频文件,后续学习了输入和事件监听就可以尝试进行切歌,暂停,继续播放加减音量等功能编写了。

作业

  1. 使用两种方式播放你喜欢的歌曲。资源不会找的话就播放我提供的两首歌曲吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/43976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

元组列表之案例

1.列表推导式 基本语法: [表达式 for语句1 if 语句1 for语句2 if语句2 ........ ] 1.零到九的平方列表 a [i*i for i in range(10)] print(a) 2.for 循环前面加if else #如果是偶数乘以2,如果是奇数直接输出 a [i*2 if i%2 0 else i for i in ran…

rabbitmq集群创建admin用户之后,提示can access virtual hosts是No access状态

问题描述: 因业务需要使用的rabbitmq是3.7.8版本的,rabbitmq在3.3.0之后就允许使用guest账号的权限了,所以需要创建一个administrator标签的用户。 如下操作创建的用户: 创建完成之后就提示如下的报错: 注&#xff1a…

Python 给存入 Redis 的键值对设置过期时间

Redis 是一种内存中的数据存储系统,与许多传统数据库相比,它具有一些优势,其中之一就是可以设置数据的过期时间。通过 Redis 的过期时间设置,可以为存储在 Redis 中的数据设置一个特定的生存时间。一旦数据到达过期时间&#xff0…

mybatis日志记录方案

首先对指定表进行监控 对表进行监控,那么就要使用的是statementInterceptor 拦截器 使用拦截器那么就要写intercepts写拦截条件进行拦截 监控只对与增删改 查询不进行监控 对于字段的监控,是谁修改了字段,那么就进行报警,或者提醒 消息提醒使用钉钉机器人进行消息提醒 P…

软链接node_modules

公司项目很多微应用的子项目公用同一套模板,也就会使用同一个node_modules 1.先创建3个同样的项目,并安装一个其中的一个node_modules给他丢到外边 2.win r -------> cmd --------> ctrlshift enter(已管理员身份打开cmd) 3.在窗口分别执行以下代码…

视频减小技巧:十大顶级视频压缩软件

视频压缩软件会尽可能地压缩视频,以便上传到各个网站。通常,4K 或更高质量的视频体积更大。压缩软件有助于压缩体积。在这里,我们来讨论一下 10 款最佳视频压缩软件。 十大顶级视频压缩软件 1. 奇客压缩宝 奇客压缩宝是由Geekersoft公司开发…

基于SpringBoot+MySQL的租房项目+文档

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

极狐Gitlab使用(1)

目录 续接上篇:极狐Gitlab安装部署-CSDN博客 1. 关闭注册功能 2. 创建群组 3. 创建用户 5. 邀请成员到群组 6. 设置导入导出项目源 7. 通过gitee导入库 8. 通过仓库URL导入 9. 自创建项目 10. 默认分支main的权限 11. 使用普通用户进入自建库 12. 创建用…

java的遍历的方法对比 效率对比

在 Java 中,遍历对象的方式主要取决于对象的类型和数据结构。以下是几种常见的遍历方式,以及它们的效率比较: 普通的 for 循环: 效率:高。使用普通的 for 循环可以直接根据索引来访问元素,适用于数组和实现…

Ubuntu系统上安装Apache和WordPress

** 第一步跟新系统包 ** 首先跟新系统包 sudo apt update sudo apt upgrade第二步下载安装apache sudo apt install apache2 ##查看apache的状态是否启动成功 sudo systemctl status apache2 ##查看服务器的ip地址 sudo ip a通过ip地址进行访问apache页面 第三步下载安装…

软件架构之嵌入式系统设计

软件架构之嵌入式系统设计 第 12 章:嵌入式系统设计12.1 嵌入式系统概论12.2 嵌入式系统的组成12.2.1 硬件架构12.2.2 软件架构 12.3 嵌入式开发平台与调试环境12.3.1 嵌入式系统软件开发平台12.3.2 嵌入式开发调试 第 12 章:嵌入式系统设计 随着计算机…

人工智能时代,零基础学IT,我首推Python作为你编程入门语言!

人工智能时代为什么将 Python 称为第一语言? 因为python适应了人工智能时代: 人工智能时代对于代码的简便性有很大要求,像传统的C/CPP/Java学习较为复杂,学习路线长,对于很多零基础的人入门困难。python的兼容性&…

k8s集群部署mysql8主备

一、搜索mysql8版本 # helm search repo mysql# helm pull bitnami/mysql --version:11.1.2# tar -zxf mysql-11.1.2.tgz# cd mysql 二、修改value.ysqml文件 动态存储类自己提前搭建。 # helm install mysql8 -n mysql-cluster ./ -f values.yaml NAME: mysql8 LAST DEPLOYED…

【简历】南京某大学顶级211硕士:拿offer可能性低

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 这份简历的背景是南京的一所顶级211的硕士,从学校背景来讲呢,求职目标就是大厂的秋招,但是因为项目描述的亮点比较少&#x…

后仿真中《SDF反标必懂连载篇》之 反向提取SDF反标延迟

今天,整理一下最近工作中遇到的一个问题,及解决问题的办法,仅分享给大家。 我们知道,我们在完成SDF时序反标之后,首先要做的事情:检查sdfannotation 文件。文件中记录了每个sdf 文件,每个实例的…

4000字|手把手教你:从0到1搭建跨境电商生意

有小伙伴问我能不能系统的聊下跨境电商的运作思路,因为过去的文章基本都是逐块的在分享各种心得,对于一些想要系统学习跨境电商的朋友来说有点晦涩难懂,刚好赶上羊羊羊,索性花点时间来认真聊聊这个。 在开始聊这个话题之前&#…

qdma enable jtag debugger

ip上的m_axi_lite 是连接到qdma_v4_0_11_dma5_rtl_top这个ip的 和jtag debugger没有关系 qdma enable jtag debugger 读取的是ip内部reg ///home/nic626/smart_nic/build_dir/qdma_no_sriov_ex/qdma_no_sriov_ex.srcs/sources_1/ip/qdma_no_sriov.xcix!/qdma_no_sriov/ip_0/so…

SQL基础-DQL 小结

SQL基础-DQL 小结 学习目标:学习内容:SELECTFROMWHEREGROUP BYHAVINGORDER BY运算符ASC 和 DESC 总结 学习目标: 1.理解DQL(Data Query Language)的基本概念和作用。 2.掌握SQL查询的基本语法结构,包括SEL…

Linux文件编程(标准C库)

目录 一、标准C库打开/创建文件,读写文件,光标移动 二、标准C库写入结构体到文件 三、其他函数补充 1.fputc函数 2.feof函数和fgetc函数 前面讲到的open函数都是基于linux内核的,也就是说在Windows系统上无法运行,移植性比较…

使用simulink进行esp32开发,进行串口收发数据需要注意的地方,为什么收发不成功

1,主要是因为simulink里的配置文件配置的波特率和串口接受软件配置的波特不一致导致的 2,主要有以下三个界面 a.配置文件 b.模型 模型直接选择使用的是那组串口就行了,一般情况下我们收发使用同一组就可以,这样收发模块填写的端…