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 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. 使用两种方式播放你喜欢的歌曲。资源不会找的话就播放我提供的两首歌曲吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux Ubuntu MySQL环境安装

1. 更新软件源 首先,确保你的Ubuntu系统已经更新了软件源列表,以便能够下载到最新的软件包。打开终端并输入以下命令: sudo apt update 2. 安装MySQL服务器 打开终端并输入以下命令来安装MySQL服务器 sudo apt install mysql-server 在…

vue3 + tsx 表格 Action 单独封装组件用法

前言 先上图看右侧列 action 的 UI 效果: 正常来说,如果一个表格的附带 action 操作,我们一般会放在最右侧的列里面实现,这个时候有些UI 框架支持在 SFC 模板里面定义额外的 solt,当然如果不支持,更通用的…

无头单向非循环链表实现 and leetcode刷题

无头单向非循环链表实现 1. 单链表的模拟实现IList.java接口:MySingleList.java文件: 2. leetcode刷题2.1 获取链表的中间节点2.2 删除链表中所有值为value的元素2.3 单链表的逆置2.4 获取链表倒数第k个节点2.5 给定 x, 把一个链表整理成前半部分小于 x,…

【C++】C++书店管理系统(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

如何在 Python 中创建一个类似于 MS 计算器的 GUI 计算器

问题背景 假设我们需要创建一个类似于微软计算器的 GUI 计算器。这个计算器应该具有以下功能: 能够显示第一个输入的数字。当按下运算符时,输入框仍显示第一个数字。当按下第二个数字时,第一个数字被替换。 解决方案 为了解决这个问题&am…

mysql高可用解决方案:MHA原理及实现

MHA:Master High Availability。对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持一主多从的架构,要…

STL(一)

书写形式:string (const string& str, size_t pos, size_t len npos); 举例: int main(){ string url("https://mp.csdn.net/mp_blog/creation/editor?spm1000.2115.3001.4503") string sub1(url,0,5);//从下标为0开始向后5个字符&…

07列的完整性约束

文章目录 设置表字段的主键约束设置表字段的外键约束(FOREIGN KEY,FK)、设置表字段的非空约束(NOT NULL, NK)设置表字段唯一约束(UNIQUE,UK)设置表字段值自动增加(AUTO_INCREMENT)设置表字段的默认值(DEFAULT)修改默认值DEFAULT、自增长和非空NK设置表字段的主键约…

30.ROM-IP核的调用

(1)ROM IP核简介: ROM是只读存储器,是一种只能读出事先锁存的固态半导体存储器。其特性是一旦存储资料就无法再将之改变或删除,并且资料也不会因为电源关闭而消失。(掉电不丢失) FPGA使用内部RA…

JavaScript青少年简明教程:为何学习JavaScript及JavaScript简介

JavaScript青少年简明教程:为何学习JavaScript及JavaScript简介 JavaScript最初是为web浏览器(前端开发)设计的。它可以在所有现代浏览器中运行,包括Chrome, Firefox, Safari, Edge等。 这意味着JavaScript代码可以在任何能运行…

学习测试7-ADB的使用

ADB是什么? ADB,即 Android Debug Bridge(安卓调试桥) 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell&…

数据(图像)增广

一、数据增强 1、增加一个已有数据集,使得有更多的多样性,比如加入不同的背景噪音、改变图片的颜色和形状。 2、增强数据是在线生成的 3、增强类型: (1)翻转 (2)切割 (3&#xf…

MessageBox与HubSpot:企业沟通与客户管理的双重利器

今天咱们来聊聊两个超实用的工具——MessageBox和HubSpot。它们就像是你的超级助手,让你和客户沟通起来更顺畅,管理起来也更轻松。 先说说MessageBox吧 想象一下,你正在忙着工作,突然客户发来个消息,你嗖的一下就收到…

实验场:在几分钟内使用 Bedrock Anthropic Models 和 Elasticsearch 进行 RAG 实验

作者:来自 Elastic Joe McElroy, Aditya Tripathi 我们最近发布了 Elasticsearch Playground,这是一个新的低代码界面,开发人员可以通过 A/B 测试 LLM、调整提示(prompt)和分块数据来迭代和构建生产 RAG 应用程序。今天…

github恢复码怎么备份

https://docs.github.com/zh/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication-recovery-methods

电商IP分类及其应用是什么?

在现代电商运营中,IP地址不仅是网络通信的基础,也扮演着关键的角色,支持多种功能和应用场景。本文将介绍几种常见的电商IP分类,以及它们在电商领域中的具体应用。 1. 前台IP与后台IP 电商网站在运营过程中通常需要区分前台IP和后…

数据不可修改 确保数据安全-GS备份存储方案防病毒防勒索

为保障企业关键数据不被病毒或勒索软件侵害,通过Veeam数据不可变功能,存储内数据更安全

【计算机组成原理 | 第三篇】各个硬件的组成部分

前言: 在前面的文章中,我们介绍了计算机架构的基本组成。可以知道计算机的基本架构由“存储器”,“运算器”,“控制器”,“输入设备”,“输出设备”这五部分组成。 在这片文章中,我们来深入的了…

【若依管理系统】注意事项

1.前端字段必填 rules: {sceneName: [{ required: true, message: "场景名称不能为空", trigger: "blur" }],orderNum: [{ required: true, message: "显示排序不能为空", trigger: "blur" }], }, 2.IDEA,默认以debug模式…

dive deeper into tensor:从底层开始学习tensor

inspired by karpathy/micrograd: A tiny scalar-valued autograd engine and a neural net library on top of it with PyTorch-like API (github.com)and Taking PyTorch for Granted | wh (nrehiew.github.io). 这属于karpathy的karpathy/nn-zero-to-hero: Neural Networks…