pygame 音乐粒子特效
代码
import pygame
import numpy as np
import pymunk
from pymunk import Vec2d
import random
import librosa
import pydub# 初始化pygame
pygame.init()# 创建屏幕
screen = pygame.display.set_mode((1920*2-10, 1080*2-10))
clock = pygame.time.Clock()# 加载音乐文件
audio_file = '周杰伦-周大侠.flac'
audio = pydub.AudioSegment.from_file(audio_file)
audio = audio.set_channels(1) # 确保音乐是单声道的
audio.export('temp.wav', format='wav') # 转换为wav格式,因为pygame不支持mp3# 播放音乐
pygame.mixer.init()
pygame.mixer.music.load('temp.wav')
pygame.mixer.music.play(-1) # -1表示无限循环播放# 转换为波形数组
y, sr = librosa.load('temp.wav')# 提取节奏
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
beat_times = librosa.frames_to_time(beat_frames, sr=sr)# 创建pymunk空间
space = pymunk.Space()
space.gravity = (0, 0) # 设置重力# 添加边界
border_thickness = 10
border_offset = border_thickness / 2# 创建边界的四个顶点
bodies = [pymunk.Body(body_type=pymunk.Body.STATIC) for _ in range(4)]
segments = [pymunk.Segment(bodies[0], (border_offset, border_offset), (screen.get_width() - border_offset, border_offset), border_thickness),pymunk.Segment(bodies[1], (screen.get_width() - border_offset, border_offset), (screen.get_width() - border_offset, screen.get_height() - border_offset), border_thickness),pymunk.Segment(bodies[2], (screen.get_width() - border_offset, screen.get_height() - border_offset), (border_offset, screen.get_height() - border_offset), border_thickness),pymunk.Segment(bodies[3], (border_offset, screen.get_height() - border_offset), (border_offset, border_offset), border_thickness)
]# 为边界形状添加到空间中
for body, segment in zip(bodies, segments):space.add(body, segment) # 同时添加刚体和形状到空间中segment.elasticity = 1.0segment.friction = 0.0# 粒子类
class Particle:def __init__(self, space, position):self.body = pymunk.Body(1, float('inf'))self.body.position = positionself.shape = pymunk.Circle(self.body, 10)self.shape.elasticity = 1.0self.shape.friction = 0.0space.add(self.body, self.shape)self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))def draw(self, screen):pos = int(self.body.position.x), int(self.body.position.y)pygame.draw.circle(screen, self.color, pos, int(self.shape.radius))# 创建粒子
particles = [Particle(space, (random.randint(100, 700), random.randint(100, 500))) for _ in range(1000)]# 主循环
running = True
frame = 0
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 0))# 更新pymunk空间space.step(1/60.0)# 根据音乐节奏更新粒子速度if frame < len(beat_times) and pygame.time.get_ticks() / 1000 > beat_times[frame]:for particle in particles:impulse = Vec2d(random.uniform(-50, 50), random.uniform(-50, 50))particle.body.apply_impulse_at_local_point(impulse)frame += 1# 绘制粒子for particle in particles:particle.draw(screen)pygame.display.flip()clock.tick(60)pygame.quit()
解释
这段代码是一个使用Pygame和Pymunk库创建的音乐可视化效果。它加载一个音乐文件,提取音乐的节奏,并根据节奏在屏幕上创建和更新粒子的位置。以下是代码的详细解释:
- 导入所需的库:
pygame用于图形和声音,numpy用于数学运算,pymunk用于物理模拟,random用于生成随机数,librosa和pydub用于处理音乐文件。 - 初始化Pygame并创建一个屏幕。
- 加载音乐文件,将其转换为单声道,并导出为WAV格式,因为Pygame不支持MP3格式。
- 使用
pygame.mixer播放音乐。 - 使用
librosa将音乐文件转换为波形数组,并提取音乐的节奏。 - 创建一个Pymunk空间,设置重力为0,并添加边界。
- 定义一个
Particle类,用于创建和绘制粒子。 - 创建一个粒子列表,每个粒子都有一个随机位置。
- 主循环:处理事件,更新Pymunk空间,根据音乐节奏更新粒子速度,绘制粒子,并更新屏幕。
- 退出Pygame。
这个代码的主要特点是使用音乐的节奏来控制粒子的运动,创造出一种动态的音乐可视化效果。

相关文章:
pygame 音乐粒子特效
代码 import pygame import numpy as np import pymunk from pymunk import Vec2d import random import librosa import pydub# 初始化pygame pygame.init()# 创建屏幕 screen pygame.display.set_mode((1920*2-10, 1080*2-10)) clock pygame.time.Clock()# 加载音乐文件 a…...
Leetcode 295.数据流的中位数
295.数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: Media…...
A59 STM32_HAL库函数 之 TIM扩展驱动 -- A -- 所有函数的介绍及使用
A59 STM32_HAL库函数 之 TIM扩展驱动 -- A -- 所有函数的介绍及使用 1 该驱动函数预览1.1 HAL_TIMEx_HallSensor_Init1.2 HAL_TIMEx_HallSensor_DeInit1.3 HAL_TIMEx_HallSensor_MspInit1.4 HAL_TIMEx_HallSensor_MspDeInit1.5 HAL_TIMEx_HallSensor_Start1.6 HAL_TIMEx_HallSe…...
【Unity】UGUI的基本介绍
Unity的UGUI(Unity User Interface)是Unity引擎内自带的UI系统,官方称之为UnityUI,是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案。以下是关于Unity的UGUI的详细介绍: 一、UGUI的特点 灵活性:…...
MySQL 9.0新特性:向量存储
MySQL 9.0 正式版已经发布,其中一个亮点就是向量(VECTOR)数据类型的支持,本文给大家详细介绍一下这个新功能。 向量类型 MySQL 9.0 增加了一个新的向量数据类型:VECTOR。它是一种可以存储 N 个数据项的数据结构&…...
ruoyi实用性改造--(四)选择数据源及非标准使用数据库
一、实用型数据直接访问/** 使用Druid中 application-druid.yml 中定义的副数据源Connection con=null; //手工调用Druid的配置访问Connection con2=null;try {//DruidDataSource ds = SpringUtils.getBean("masterDataSource");DruidDataSource ds = Spring…...
HMI 的 UI 风格创造奇迹
HMI 的 UI 风格创造奇迹...
如何安全隐藏IP地址,防止网络攻击?
当您想在互联网上保持隐私或匿名时,您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您,并被用来了解您的位置。下面的文章将教您如何隐藏自己,不让任何试图跟踪您的活动的人发现。 什么是 IP 地址? 首先&am…...
Windows10/11家庭版开启Hyper-V虚拟机功能详解
Hyper-V是微软的一款虚拟机软件,可以使我们在一台Windows PC上,在虚拟环境下同时运行多个互相之间完全隔离的操作系统,这就实现了在Windows环境下运行Linux以及其他OS的可能性。和第三方虚拟机软件,如VMware等相比,Hyp…...
202487读书笔记|《我有个拥抱,你要不要》——生活从来如此,你的态度赋予它意义
202487读书笔记|《我有个拥抱,你要不要》——生活从来如此,你的态度赋予它意义 《我有个拥抱,你要不要》作者一天到晚气fufu,挺有愛的小漫画,适合用来看图说话锻炼小语言,我看的很快乐也写得很痛快…...
使用tcpdump抓取本本机的所有icmp包
1、抓取本机所有icmp包 tcpdump -i any icmp -vv 图中上半部分,是源主机tmp179无法ping通目标主机192.168.10.79(因为把该主机关机了)的状态,注意看,其中有unreachable 图中下半部分,是源主机tmp179可以p…...
Nginx:负载均衡小专题
运维专题 Nginx:负载均衡小专题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…...
新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布
2024年7月8日,人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括:图表方面,新增组合图、热力地图、符号地图、K线图等图表类型,并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…...
android perfetto使用技巧梳理
1 抓取方法 根据不同的配置参数,会显示不同的功能。 比如有的trace文件就无法显示线程状态信息,有的无法显示锁依赖信息等等,要看你的参数,我这个是很全的,基本够了,如果还想添加,可以命令行看…...
bond网络配置文件中zone
在bond网络配置文件中,zone是一个参数,用于指定bond设备所属的防火墙安全区域。它可以设置为一个字符串值,通常是一个自定义的区域名称。 防火墙安全区域是一种网络隔离和安全策略的概念,它可以将网络划分为不同的区域࿰…...
spring事务详解
事务管理方式 在Spring中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式。 编程式事务管理: 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,sp…...
LIMS系统的核心功能有哪些
LIMS实验室管理系统,是一种利用信息化技术管理和优化实验室工作流程的系统。其核心功能主要包括以下几个方面: 一、样品管理 样品登记与追踪:LIMS系统能够对实验室内的所有样品进行统一管理,包括样品的接收、登记、分类、追踪和管…...
jenkins在使用pipeline时,为何没有方块形视图
项目场景: 安装完Jenkins时后,通过pipeline创建的项目任务。 问题描述 在立即构建后,没有显示每个阶段的视图。 原因分析: 原因是,刚安装的Jenkins,这个视图不是Jenkins自带的功能,而必须安装…...
Desktop docker 部署 WordPress
Desktop Docker 部署 WordPress 之前都是在Linux里面玩的,今天看到别人在windwos下安装docker,一时兴起装了一个试试,效果一般,很吃硬盘空间和内存。 首先在docker官方下载桌面版,安装下一步一直到完成。 安装完docke…...
简单的找到自己需要的flutter ui 模板
简单的找到自己需要的flutter ui 模板 网站 https://flutterawesome.com/ 简介 我原本以为会很难用 实际上不错 很简单 打开后界面类似于,右上角可以搜索 点击view github 相当简单 很oks...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
