python提取图片频谱_Python提取音乐谱并将其可视化,频谱
你有没有经常好奇一些音乐软件的频谱特效是怎么做的,为什么做的这么好看?有没有想试试自己提取音乐频谱并可视化展现出来?今天,咱就结合上次的音乐剪辑操作:
来可视化下面这首歌曲的频谱!
1.准备工作
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:
超详细Python安装指南
进行安装。
Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。
当然,我更推荐大家用VSCode编辑器,把本文代码Copy下来,在编辑器下方的终端装依赖模块,多舒服的一件事啊:
Python 编程的最好搭档—VSCode 详细指南
。
输入以下命令安装本文所需要的依赖模块:
pip install pydub
pip install librosa
看到 Successfully installed xxx 则说明安装成功。
2.频谱展示
使用librosa和matplot,我们可以用10行代码完整地展示整个频谱:
import matplotlib.pyplot as plt
import librosa.display
# 音乐文件载入
audio_path = 'Fenn.mp3'
music, sr = librosa.load(audio_path)
# 宽高比为14:5的图
plt.figure(figsize=(14, 5))
librosa.display.waveplot(music, sr=sr)
# 显示图
plt.show()
不过,这样的频谱是整段音乐的,看起来非常难看,接下来我们使用 pydub 切割频谱,以获得更佳的效果。我们细分到0到1秒的区段来查看频谱:
import matplotlib.pyplot as plt
import librosa.display
import numpy as np
from pydub import AudioSegment
# 1秒=1000毫秒
SECOND = 1000
# 音乐文件
AUDIO_PATH = 'Fenn.mp3'
def split_music(begin, end, filepath):
# 导入音乐
song = AudioSegment.from_mp3(filepath)
# 取begin秒到end秒间的片段
song = song[begin*SECOND: end*SECOND]
# 存储为临时文件做备份
temp_path = 'backup/'+filepath
song.export(temp_path)
return temp_path
music, sr = librosa.load(split_music(0, 1, AUDIO_PATH))
# 宽高比为14:5的图
plt.figure(figsize=(14, 5))
librosa.display.waveplot(music, sr=sr)
plt.show()
这下细是细了,但是还是太复杂了,其实我们做频谱的展示,只需要正值即可:
然后我们还可以进一步放大,比如说0.9秒到1秒之间的频谱:
放大
n0 = 9000
n1 = 10000
music = np.array([mic for mic in music if mic > 0])
plt.figure(figsize=(14, 5))
plt.plot(music[n0:n1])
plt.grid()
显示图
plt.show()
这样好看许多,不过如果要达成QQ音乐那种效果,还是需要进行大量改造。
比如用精美的图像元素来填充替代、然后零值如何处理?如何让频谱更加平稳?此外,我们是静态的图像,还需要根据事件动态地延续波段。
用于生产的代码肯定比我们这简易的代码更加复杂,而且也不应该是暴力去除负值绘制图像。这些有兴趣的读者可以自行研究啦。
我们的文章到此就结束啦,如果你希望我们今天的
Python 实战教程
,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦,有任何问题都可以在下方留言区留言,我们都会耐心解答的!
Python实用宝典
不只是一个宝典
欢迎关注公众号:Python实用宝典
python提取图片频谱_Python提取音乐谱并将其可视化,频谱相关推荐
- python获取图片名称_python提取图像的名字*.jpg到txt文本的方法
如下所示: # -*- coding:utf-8 -*- import sys sys.path.append('E:\\Anaconda\\libs') import os #os:操作系统相关的信 ...
- python获取图片坐标_python提取照片坐标信息的实例代码
python提取照片坐标信息的代码如下所示: from PIL import Image from PIL.ExifTags import TAGS import os output="Z: ...
- python计算颜色占比_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结 ...
- python 二维码_Python提取支付宝和微信支付二维码
本文首发于我的个人博客,更多 Python 和 django 开发教程,请访问 追梦人物的博客. 支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二 ...
- lisp提取长方形坐标_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没 ...
- 爬虫requests如何提取图片_如何提取图片上的文字(办公技巧)
是夜,公寓里,一道黑影闪过窗前,对面楼顶传来一声凄厉的猫叫声. 王美丽一个机灵,目中闪过一丝恐惧. 她面前的电脑里,正在播放<午夜凶铃>. 阴森恐怖的配音,让她全身发冷,感觉后脊梁有一股凉 ...
- python显示图片列表_python读取图片任意范围区域
使用python进行图片处理,现在需要读出图片的任意一块区域,并将其转化为一维数组,方便后续卷积操作的使用. 下面使用两种方法进行处理: convert 函数 from PIL import Imag ...
- python去除图片马赛克_python 检测图片是否有马赛克
首先是canny边缘检测,将图片的边缘检测出来,参考博客 原理讲的很清晰,给原博主一个赞 边缘检测之后按照正方形检索来判定是否是马赛克内容 原理知晓了之后就很好做了 话说matlab转化为python ...
- python调整图片亮度_python 调整图片亮度的示例
实现效果 实现代码 import matplotlib.pyplot as plt from skimage import io file_name='D:/2020121173119242.png' ...
最新文章
- 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Stations(概率期望,递推前缀和优化)
- Nature:“巨型原子”使芯片同时处理和收发量子信息成为可能
- 为什么处理有序数组比无序数组快?
- java for 删除 list 中的项
- 【Groovy】编译时元编程 ( 编译时方法拦截 | 在 MyASTTransformation#visit 方法中进行方法拦截 )
- 转载--让搜索引擎优化(SEO)更有效 CSS+DIV标签命名规范
- 【数据结构与算法】之深入解析“地图分析”的求解思路与算法示例
- windows安装logstash6.2.3
- 找不到合适的创业路该怎么办
- byte[]与Image Image与 byte[] 之间的转换
- JAVA基础----简答
- C++ const修饰指针变量的位置不同代表的意义
- MathType安装教程,以及部分功能变灰,重新点亮
- 计算机设计大赛材料准备讲解
- Bootstrap broker localhost9092 (id -1 rack null) disconnected
- kettle的图形工具(Spoon)简单介绍
- 宾得的宾干微距镜头DA35mm
- libusb ubuntu
- 盘点那些有逼格的网站
- Java中存取Rtf文件
热门文章
- 实验吧——天下武功唯快不破
- [atcoder caddi2018]D.Harlequin——博弈论
- 常用知识图谱数据集FB15K, YAGO, WN18
- repo init 与 repo sync 区别
- 基于JAVA高考报考指南网站计算机毕业设计源码+数据库+lw文档+系统+部署
- 七个合法学习黑客技术的网站,让你从萌新成为大佬
- 九龙证券|动力锂离子电池的能量密度可达多少?
- 计算机网络第一章-概叙 思维导图
- 坯子库怎么导入插件_SketchUp坯子库管理器 坯子插件库免费版v2019.4.0 - 云骑士一键重装系统...
- 安卓CTS官方文档之兼容性测试套件简介