Pygame实现音乐可视化

news2024/11/24 13:31:33

pip install pydub

pip install ffmpeg

pip install pyaudio

完整代码如下:

import pygame,sys  
import random
import numpy as np  
from random import randint
import colorsys
from pydub import AudioSegment
import math

def rnd_color(): #随机颜色
    h,s,l = random.random(),0.5+random.random()/2.0,0.4+random.random()/5.0
    return [int(256*i) for i in colorsys.hls_to_rgb(h,l,s)]

pygame.init()
screen_width, screen_height = 800, 400  
screen = pygame.display.set_mode((screen_width, screen_height))  
pygame.display.set_caption("音乐可视化")  

AudioSegment.converter = "ffmpeg.exe" #去官网手动下载
AudioSegment.ffmpeg = "ffmpeg.exe"
AudioSegment.ffprobe = "ffprobe.exe"

audio_path = "chengdu.mp3"  # 音频文件路径  
audio = AudioSegment.from_mp3(audio_path) 
audio_data = np.array(audio.get_array_of_samples(), dtype=np.int16)  
print(audio.frame_rate) #采样率
print(len(audio_data))
print(audio.duration_seconds) #时长

track = pygame.mixer.music.load("chengdu.mp3")
pygame.mixer.music.play() # 播放

# 等待直到播放结束
while pygame.mixer.music.get_busy():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.mixer.music.stop()
            pygame.quit()
            sys.exit()
            
    screen.fill((0,0,0))
    
    circle_color = rnd_color()
    
    tm = pygame.mixer.music.get_pos()   #当前播放的位置(时间) 
    tm = int(tm/1000*2*44100) #根据播放时间计算出数组下标

    for i in range(44100*2):
        t = int( tm+i )
        radius = audio_data[t]/32767 * (screen.get_height()/2) #根据屏幕高度缩放
        pygame.draw.line(screen,circle_color,
                         (i*screen.get_width()/44100/2,screen.get_height()/2-radius),
                          (i*screen.get_width()/44100/2,screen.get_height()/2))

    
    pygame.display.flip()  

效果图(随着音乐的播放而律动):

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

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

相关文章

Python的reshape的用法和reshape(1,-1)、reshape(-1,1)

在创建DataFrame的时候常常使用reshape来更改数据的列数和行数。 reshape可以用于numpy库里的ndarray和array结构以及pandas库里面的DataFrame和Series结构。 reshape(行,列)可以根据指定的数值将数据转换为特定的行数和列数,这个…

用SAM2和Cutie模型目标追踪

一、数据集 视频:每个视频文件夹以图片帧的形式存储 box:给出每个视频第一帧要追踪的物体的box 二、将数据格式转换成SAM2所需要的格式 主要是将box转换成mask的格式,下面这个代码就是将box转换成mask的代码,具体转换原理如下…

深圳易图讯科技有限公司承建的厦门应急处突大队三维电子沙盘顺利通过专家验收

近日,深圳易图讯科技有限公司承建的厦门应急处突大队三维电子沙盘系统项目成功通过专家组的严格验收,标志着该系统在应急管理和处置突发事件方面的应用取得了重要突破。 验收过程中,专家组对三维电子沙盘系统的各项功能进行了全面而细致的测试…

第十六周:机器学习笔记

第十六周周报 摘要Abstratc一、机器学习1. Pointer Network(指针网络)2. 生成式对抗网络(Generative Adversarial Networks | GAN)——(上)2.1 Generator(生成器)2.2 Discriminator&…

Cef加载自定义本地资源

在Cef auto build下载cefCEF Automated Builds 我下载的是104,使用cefsimple工程。 例如:前端资源如下 通过http协议把前端资源加载出来。所有的资源都通过http://local.test.cn/xxx加载。 前端资源包括index.html、test.css、test.js index.html&am…

麒麟系统离线安装英伟达驱动

麒麟系统离线安装英伟达驱动 驱动相关程序下载下载显卡驱动下载CUDA-Toolkit下载cudnn 安装关闭自带图形界面禁用 Nouveau 驱动安装驱动安装CUDA-Toolkit安装cudnn 驱动相关程序下载 下载显卡驱动 进入显卡驱动查询页面,下载对应的显卡驱动,页面如下&a…

第十节:React路由:react-router认识与基本使用

1. React Router的理解 React的路由根据项目的不同使用不同的路由库,web应用主要使用react-router和react-router-dom react-router和react-router-dom的区别 react-rotuer 核心库,提供了一些核心的api,但是没有提供dom操作进行跳转的api react-router-dom扩展了核心库,提供了一…

Edge TTS

edge-tts项目地址:https://github.com/rany2/edge-tts 1.安装部署 在cmd中运行以下命令安装edge-tts pip install edge-tts pip install edge-tts速度非常快,几秒钟就安装完成了。 2.文本转语音 输入以下命令,将一段英文转为音频。 edg…

Linux——传输层协议

目录 一再谈端口号 1端口号范围划分 2两个问题 3理解进程与端口号的关系 二UDP协议 1格式 2特点 3进一步理解 3.1关于UDP报头 3.2关于报文 4基于UDP的应用层协议 三TCP协议 1格式 2TCP基本通信 2.1关于可靠性 2.2TCP通信模式 3超时重传 4连接管理 4.1建立…

RocketMq的学习

1.mq的秒杀场景 2.mq产品的选型

基于SpringBoot的校园兼职管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

solidity中的mapping以及Memory,Storage Calldata

1.Memory,Storage & Calldata 在 Solidity 中,有以下几种数据存储位置: 栈(Stack):栈是一种临时存储区域,用于存储局部变量和函数参数。在函数执行期间,栈上的数据会被分配和释…

探索光耦:光耦——电动自行车安全与智能的坚实保障

随着电动自行车市场的蓬勃发展,如何提升其安全性、可靠性和智能化水平已成为行业关注的焦点。在众多关键元件中,光电耦合器(简称光耦)正以其独特的功能,成为电动自行车设计中的关键角色。下面,让我们一同探…

Ubuntu22.04阿里云服务器 Gitlab搭建CICD

gitlab搭建cicd流水线教程 1、阿里云申请免费云盘 申请免费云盘用于创建gitlab 申请方法百度 2、安装gitlab-ce 更新系统: sudo apt update sudo apt upgrade -y 安装必要的依赖: sudo apt install -y curl openssh-server ca-certificates pos…

【云原生】Helm资源清单管理工具

资源清单管理工具-Helm 文章目录 资源清单管理工具-Helm资源列表基础环境一、Helm的介绍1.1、Helm的价值概述1.2、Helm的关键名词 二、安装部署Helm2.1、解压安装包2.2、添加命令补全设置 三、使用Helm部署服务管理3.1、使用Helm创建chart3.2、响应式创建名称空间3.3、安装char…

基于Arduino的植物状态监测系统

Arduino植物监测/浇水系统 本项目的3D打印及源码开源,可以私信我进行获取 简介 大家好,今天我将向大家介绍一个非常有趣的项目——Arduino植物监测/浇水系统。这个项目利用一些传感器来观察土壤的状况,并根据这些读数来判断植物是否需要浇…

异构环境下统一授权管理系统的兼容性具体如何实现?

在异构环境中,由于不同系统的差异性,实现统一授权管理面临诸多挑战。其中,兼容性问题是关键之一。兼容性的实现不仅关系到不同系统之间的协同工作,还直接影响到整个管理系统的效率和稳定性。 异构系统带来的挑战 异构系统的存在…

手写mybatis之通过注解配置执行SQL语句

前言 可能领导也都觉得可能就是码农不爱说话,其实不爱说话是一方面,但还有另外一方面是有些领导对于码农提出的问题,给出的回复往往是:“你提出这个问题,你就要给出这个问题的解决办法!” 所以不同的岗位要…

AD24之铺铜操作

1.选择板框,即机械1层,转换为覆铜 这样顶层就铺好了,还需要铺底层 2.打开底层,选择板框,转换为铺铜,然后给铜皮添加网络和层,最后是铺铜 注意:None铺铜是无效果的,要Ha…

2.使用 Label Studio 标注文本

使用 Label Studio 标注文本 文章目录 使用 Label Studio 标注文本前言Label Studio的简单使用1.创建项目2.添加本地存储3.选择标注模板4.添加数据5.标注6.添加关系 总结 前言 Label Studio是一个开源的功能强大的标注平台,可以标注视频,图片&#xff0…