当前位置: 首页 > news >正文

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库创建的音乐可视化效果。它加载一个音乐文件,提取音乐的节奏,并根据节奏在屏幕上创建和更新粒子的位置。以下是代码的详细解释:

  1. 导入所需的库:pygame用于图形和声音,numpy用于数学运算,pymunk用于物理模拟,random用于生成随机数,librosapydub用于处理音乐文件。
  2. 初始化Pygame并创建一个屏幕。
  3. 加载音乐文件,将其转换为单声道,并导出为WAV格式,因为Pygame不支持MP3格式。
  4. 使用pygame.mixer播放音乐。
  5. 使用librosa将音乐文件转换为波形数组,并提取音乐的节奏。
  6. 创建一个Pymunk空间,设置重力为0,并添加边界。
  7. 定义一个Particle类,用于创建和绘制粒子。
  8. 创建一个粒子列表,每个粒子都有一个随机位置。
  9. 主循环:处理事件,更新Pymunk空间,根据音乐节奏更新粒子速度,绘制粒子,并更新屏幕。
  10. 退出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.数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 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&#xff08;Unity User Interface&#xff09;是Unity引擎内自带的UI系统&#xff0c;官方称之为UnityUI&#xff0c;是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案。以下是关于Unity的UGUI的详细介绍&#xff1a; 一、UGUI的特点 灵活性&#xff1a…...

MySQL 9.0新特性:向量存储

MySQL 9.0 正式版已经发布&#xff0c;其中一个亮点就是向量&#xff08;VECTOR&#xff09;数据类型的支持&#xff0c;本文给大家详细介绍一下这个新功能。 向量类型 MySQL 9.0 增加了一个新的向量数据类型&#xff1a;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地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时&#xff0c;您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您&#xff0c;并被用来了解您的位置。下面的文章将教您如何隐藏自己&#xff0c;不让任何试图跟踪您的活动的人发现。 什么是 IP 地址&#xff1f; 首先&am…...

Windows10/11家庭版开启Hyper-V虚拟机功能详解

Hyper-V是微软的一款虚拟机软件&#xff0c;可以使我们在一台Windows PC上&#xff0c;在虚拟环境下同时运行多个互相之间完全隔离的操作系统&#xff0c;这就实现了在Windows环境下运行Linux以及其他OS的可能性。和第三方虚拟机软件&#xff0c;如VMware等相比&#xff0c;Hyp…...

202487读书笔记|《我有个拥抱,你要不要》——生活从来如此,你的态度赋予它意义

202487读书笔记|《我有个拥抱&#xff0c;你要不要》——生活从来如此&#xff0c;你的态度赋予它意义 《我有个拥抱&#xff0c;你要不要》作者一天到晚气fufu&#xff0c;挺有愛的小漫画&#xff0c;适合用来看图说话锻炼小语言&#xff0c;我看的很快乐也写得很痛快&#xf…...

使用tcpdump抓取本本机的所有icmp包

1、抓取本机所有icmp包 tcpdump -i any icmp -vv 图中上半部分&#xff0c;是源主机tmp179无法ping通目标主机192.168.10.79&#xff08;因为把该主机关机了&#xff09;的状态&#xff0c;注意看&#xff0c;其中有unreachable 图中下半部分&#xff0c;是源主机tmp179可以p…...

Nginx:负载均衡小专题

运维专题 Nginx&#xff1a;负载均衡小专题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…...

新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布

2024年7月8日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增组合图、热力地图、符号地图、K线图等图表类型&#xff0c;并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…...

android perfetto使用技巧梳理

1 抓取方法 根据不同的配置参数&#xff0c;会显示不同的功能。 比如有的trace文件就无法显示线程状态信息&#xff0c;有的无法显示锁依赖信息等等&#xff0c;要看你的参数&#xff0c;我这个是很全的&#xff0c;基本够了&#xff0c;如果还想添加&#xff0c;可以命令行看…...

bond网络配置文件中zone

在bond网络配置文件中&#xff0c;zone是一个参数&#xff0c;用于指定bond设备所属的防火墙安全区域。它可以设置为一个字符串值&#xff0c;通常是一个自定义的区域名称。 防火墙安全区域是一种网络隔离和安全策略的概念&#xff0c;它可以将网络划分为不同的区域&#xff0…...

spring事务详解

事务管理方式 在Spring中&#xff0c;事务有两种实现方式&#xff0c;分别是编程式事务管理和声明式事务管理两种方式。 编程式事务管理&#xff1a; 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理&#xff0c;sp…...

LIMS系统的核心功能有哪些

LIMS实验室管理系统&#xff0c;是一种利用信息化技术管理和优化实验室工作流程的系统。其核心功能主要包括以下几个方面&#xff1a; 一、样品管理 样品登记与追踪&#xff1a;LIMS系统能够对实验室内的所有样品进行统一管理&#xff0c;包括样品的接收、登记、分类、追踪和管…...

jenkins在使用pipeline时,为何没有方块形视图

项目场景&#xff1a; 安装完Jenkins时后&#xff0c;通过pipeline创建的项目任务。 问题描述 在立即构建后&#xff0c;没有显示每个阶段的视图。 原因分析&#xff1a; 原因是&#xff0c;刚安装的Jenkins&#xff0c;这个视图不是Jenkins自带的功能&#xff0c;而必须安装…...

Desktop docker 部署 WordPress

Desktop Docker 部署 WordPress 之前都是在Linux里面玩的&#xff0c;今天看到别人在windwos下安装docker&#xff0c;一时兴起装了一个试试&#xff0c;效果一般&#xff0c;很吃硬盘空间和内存。 首先在docker官方下载桌面版&#xff0c;安装下一步一直到完成。 安装完docke…...

简单的找到自己需要的flutter ui 模板

简单的找到自己需要的flutter ui 模板 网站 https://flutterawesome.com/ 简介 我原本以为会很难用 实际上不错 很简单 打开后界面类似于,右上角可以搜索 点击view github 相当简单 很oks...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...