Python学习笔记35:进阶篇(二十四)pygame的使用之音频文件播放

news2024/9/28 11:24:57

前言

基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。

我们的下一步目标是完成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 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()

在这里插入图片描述

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

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

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

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

  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 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播放音频文件,后续学习了输入和事件监听就可以尝试进行切歌,暂停,继续播放加减音量等功能编写了。

作业

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

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

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

相关文章

对接高德开放平台API

高德开放平台API: https://lbs.amap.com/ 一、天气查询 天气查询: https://lbs.amap.com/api/webservice/guide/api/weatherinfo adcode城市码表下载: https://lbs.amap.com/api/webservice/download Component public class WeatherUtil {Resourceprivate GdCon…

异步任务中传递用户信息的一种优雅写法

目录 前言基础写法测试示例 升级写法测试示例 前言 在异步任务中,我们通常会遇到子任务获取当前用户的场景。我们可能会采取ThreadLocal来存储主线程传递的用户信息。然后在业务开始时set,业务结束时remove,来保证不会出现OOM的场景。 基础…

vue使用 “xlsx-style“: “^0.8.13“ 报错

关于jszip not a constructor报错配置config.js文件后可能还报错的问题: 在node_modules处找到node_modules\xlsx-style\xlsx.js 文件。 将 if(typeof jszip undefined) jszip require(./jszip).JSZip;(应该在xlsx.js文件1339行左右) 替换成 if(typeof jszip und…

聚类分析方法(三)

目录 五、聚类的质量评价(一)簇的数目估计(二)外部质量评价(三)内部质量评价 六、离群点挖掘(一)相关问题概述(二)基于距离的方法(三)…

外贸达人的秘密武器:提升效率的插件神器

每一位外贸从业者都在寻找能够提升工作效率、优化业务流程的利器。今天,我要向大家介绍几款外贸工作中的实用的浏览器插件工具,它们将是你业务成功的得力助手。 语言翻译类: Acronyms:外贸交流中,缩写的快速识别至关重…

高级语言与机器级代码之间的对应

目录 一. 汇编语言的基础知识二. 常用的X86汇编指令三. AT&T格式和Intel格式四. 选择语句的机器级表示五. 循环语句机器级表示 \quad 一. 汇编语言的基础知识 \quad X86就是能被能够被以86结尾的CPU(如8086,80286,80386)支持的…

基于前馈神经网络 FNN 实现股票单变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…

使用 Plotly.js 在 Vue 中创建交互式散点图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Plotly.js 在 Vue 中创建交互式散点图 应用场景介绍 Plotly.js 是一个功能强大的 JavaScript 库,用于创建交互式数据可视化。它支持各种图表类型,包括散点图、折线图和直方图。在…

分享:2024好的ai文章生成器下载资源 tzqsbic

在当今数字化的时代,ai技术的发展日新月异,为我们的生活和工作带来了诸多便利。其中,ai文章生成器作为一项创新的工具,给当代人们带来了很多好处,尤其是对于很多创作者,不仅能解决创作困难,而且…

【Python实战因果推断】30_双重差分1

目录 Panel Data 在讨论了干预效果异质性之后,是时候转换一下思路,回到平均干预效果上来了。在接下来的几章中,您将学习如何利用面板数据进行因果推断。 面板数据是一种跨时间重复观测的数据结构。在多个时间段观察同一单位,可以…

VMware虚拟机使用标准分区后对分区进行扩容

前言: 使用虚拟机创建系统后,/ 盘 想要扩容需要几步才能实现,下面将介绍具体流程 确定根分区磁盘以及分区号,和起始扇区和结束扇区 # 查看磁盘名称和分区 # 如下可看出根分区为 /dev/sda2 ,磁盘为sda [root192 ~]# ls…

【C++】继承(二)

目录 5、继承与友元 6、继承与静态成员 7、复杂的菱形继承和菱形虚拟继承 8、继承的总结与反思 5、继承与友元 友元关系不能继承,也就是说父类的友元不能访问子类的私有或保护的成员 class Student; class Person { public:friend void Display(const Person&a…

Struts 2.0.0 至 2.1.8.1 远程命令执行漏洞(CVE-2010-1870)

前言 CVE-2010-1870 是一个存在于 Apache Struts 2 中的漏洞,特别是在 Struts 2 动作框架中。这个安全缺陷允许远程攻击者通过操纵动态方法调用(DMI)功能在服务器上执行任意代码。当 DMI 功能启用时,框架可以接受和处理来自用户输…

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…

初识c++(类与对象——上)

一、类的定义 1、类定义格式 • class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或 者成员函…

内存巨头SK海力士正深化与TSMC/NVIDIA合作关系,开发下一代HBM

据BusinessKorea报道,内存巨头SK海力士正深化与台积电(TSMC)及英伟达(NVIDIA)的合作关系,并计划在9月的台湾半导体展(Semicon Taiwan)上宣布更紧密的伙伴关系。 SK海力士与台积电的合作历史已久。2022年,台积电在其北美技术研讨会上宣布成立O…

docker-2

27.构建python应用镜像-dockerfile实践项目 1.基于官方的镜像,构建python代码运行环境 dockerfile 2.运行镜像,开启一个读写的容器空间(定制操作,将代码丢进去,运行调试) 3.提交这个变化的容器层数据&#…

打工人小强向老板提了2次异地组网方案全被否!直言不想干了!

前几天有宝友在微信群咨询组网问题,非常具有代表性。关于组网方案问题,在此小宝给大家分享一下。 情况是这样的: 运维小伙小强,就职互联网行业,目前维护3个分公司网络,分别是: 1、北京&#…

Android数据库基础

目录 1、安卓数据存储方式 2、数据库事务 数据库事务的特性(ACID) 事务的隔离级别 事务总结 3、ContetProvider 作用 ​编辑 统一资源标识符URI ​编辑 MIME类型 ContentProvider主要方法 4、ContentResolver 作用 主要方法 使用案例 辅助工具类 ContentUris Uri…

element plus 实现跨页面+跨tab栏多选

文章目录 element plus 层面数据层面 菜鸟好久没写博客了,主要是没遇见什么很难的问题,今天碰见了一个没有思路的问题,解决后立马来和大家伙分享了! 菜鸟今天要实现一个需求,就是:实现跨页面跨 tab栏 多选…