Python实现音乐频谱可视化:从基础到进阶

Miles
Miles
发布时间:2026-10-15 | 5人浏览过
原创

本文详解如何使用Python的librosa和pydub库提取音乐频谱并进行可视化。通过10行代码展示完整频谱,并利用pydub进行时间切片,实现特定时间段(如0-1秒)的频谱展示。文章进一步探讨了去除负值、局部放大及动态渲染等进阶技巧,为开发类似QQ音乐的高颜值频谱特效提供基础思路。

前言

你是否好奇音乐软件中那些绚丽的频谱特效是如何生成的?是否也想尝试提取音乐频谱并将其可视化呈现?本文将结合之前的音乐剪辑操作:

3行Python代码实现剪辑音乐

来直观地展示一首歌曲的频谱效果。

1.环境准备

在开始之前,请确保你的电脑已正确安装Python和pip。若未安装,可参考《超详细Python安装指南》进行配置。

Windows用户请打开命令提示符(Cmd,可通过开始菜单搜索或Win+R运行CMD),macOS用户请打开终端(Terminal,通过Command+空格搜索启动)。

推荐使用VSCode编辑器,将本文代码复制下来,并在编辑器下方的终端中安装依赖模块,这样操作更加便捷舒适。

在终端执行以下命令以安装所需依赖:

pip install pydub
pip install librosa

若看到“Successfully installed xxx”提示,则表明安装成功。

2.频谱可视化实现

利用librosa和matplotlib库,仅需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秒至ijend秒间的片段
    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秒之间的频谱变化:

# 公众号:Python 实用宝典
n0 = 9000
n1 = 10000
music = np.array([mic for mic in music if mic > 0])
plt.figure(figsize=(14, 5))
pit.plot(music[n0:n1])
plt.grid()
#显示图
plt.show()

这样的展示效果更加清晰美观。不过,若要达到QQ音乐那样的专业效果,仍需进行大量优化与改造。

例如,需要使用精美的图像元素进行填充替代,并处理零值问题;同时,需解决频谱平滑处理及动态延续波段的技术难点。

生产环境的代码必然比本文示例更为复杂,且不应简单地通过暴力去除负值来绘制图像。有兴趣的读者可在此基础上自行深入研究。

以上就是Python实现提取音乐频谱的方法详解的详细内容,更多关于Python提取频谱的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表