当前位置: 首页 > 后端技术 > Python

Python提取音乐频谱并可视化

时间:2023-03-26 16:10:58 Python

你有没有想过一些音乐软件的频谱效果是怎么做出来的,为什么那么漂亮?您是否曾经想尝试自己提取音乐频谱并将其可视化?今天,结合上次的音乐编辑操作:Python编辑音乐,可视化下图歌曲频谱,如此简单!1.在开始准备工作之前,您需要确保您的计算机上已经成功安装了Python和pip。如果没有,请访问这篇文章:超详细的Python安装指南进行安装。Windows环境打开Cmd(开始-运行-CMD),苹果系统环境打开Terminal(command+空格进入Terminal),准备开始输入命令安装依赖。当然,我推荐大家使用VSCode编辑器,复制本文代码,在编辑器下方的终端中安装依赖模块。多么惬意的一件事:Python编程的最佳搭档——VSCode详解指南。输入以下命令安装本文所需的依赖模块:pipinstallpydubpipinstalllibrosa如果看到Successfullyinstalledxxx,则安装成功。2.频谱展示使用librosa和matplot,我们用10行代码就可以完整展示整个频谱:audio_path)#纵横比为14:5的图形plt.figure(figsize=(14,5))librosa.display.waveplot(music,sr=sr)#显示图形plt.show()但是这样的频谱就是整首曲子看起来很难看。接下来,我们使用pydub来切谱,以获得更好的效果。我们从0到1秒细分成段来查看频谱:importmatplotlib.pyplotaspltimportlibrosa.displayimportnumpyasnpfrompydubimportAudioSegment#1second=1000millisecondsSECOND=1000#MusicfileAUDIO_PATH='Fenn.mp3'defsplit_music(begin,end,filepath):#导入音乐song=AudioSegment.from_mp3(filepath)#从beginsecond到endsecondsong=song[begin*SECOND:end*SECOND]#存储为临时文件备份temp_path='backup/'+filepathsong.export(temp_path)returntemp_pathmusic,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=9000n1=10000music=np.array([micformicinmusicifmic>0])plt.figure(figsize=(14,5))plt.plot(music[n0:n1])plt.grid()displaygraphplt.show()这看起来好多了,但是如果要达到QQ音乐的效果,还需要大量的修改。比如用精美的图片元素填充替换,那么零值怎么处理呢?如何让光谱更稳定?另外我们是静态图片,需要根据事件动态续波段。production的代码肯定比我们简单的代码要复杂,应该不是暴力去负值画图吧感兴趣的读者可以自行研究。这是我们文章的结尾。想要我们今天的Python实战教程,请继续关注我们。如果对您有帮助,请在下方点赞/观看。有什么问题可以在下方评论留言,我们会耐心解答!Python实战宝典不只是合集欢迎来到公众号:Python实战宝典原文来自Python实战宝典:Python提取音乐频谱并可视化