绘制音频波形和频谱图重叠

Posted

技术标签:

【中文标题】绘制音频波形和频谱图重叠【英文标题】:Plot audio waveform and spectrogram overlap 【发布时间】:2019-12-11 21:59:44 【问题描述】:

我正在使用 librosa 处理音频,我需要在同一个显示器中绘制频谱图和波形。

我的代码:

plt.figure(figsize=(14, 9))

plt.figure(1)

plt.subplot(211)
plt.title('Spectrogram')
librosa.display.specshow(stft_db, x_axis='time', y_axis='log')

plt.subplot(212)
plt.title('Audioform')
librosa.display.waveplot(y, sr=sr)

使用这段代码我得到了这个情节

但我需要这样的东西

【问题讨论】:

【参考方案1】:

根据 librosa,您可以为显示方法提供一个轴来绘制项目,specshow、waveplot。我建议直接定义你的 matplotlib 图形和子图,然后给 librosa 绘制它们的坐标轴。

fig = plt.figure(figsize=(14, 9)) #This setups the figure
ax1 = fig.subplots() #Creates the Axes object to display one of the plots
ax2 = ax1.twinx() #Creates a second Axes object that shares the x-axis

librosa.display.specshow(stft_db, x_axis='time', y_axis='log', ax=ax1)
librosa.display.waveplot(y, sr=sr, ax=ax2)
plt.show()

可能需要进行更多格式化以获得所需的外观,我建议查看 matplotlib 中的this example,以获得类似的共享轴图。

【讨论】:

感谢乔的快速回复!效果很好!【参考方案2】:

不使用子图,而是使用单个图的相同轴来显示两个图。

fig = plt.figure(figsize=(14, 9))
ax = librosa.display.specshow(stft_db, x_axis='time', y_axis='log')
librosa.display.waveplot(y, sr=sr, ax=ax)
plt.show()

【讨论】:

以上是关于绘制音频波形和频谱图重叠的主要内容,如果未能解决你的问题,请参考以下文章

H5录音音频可视化-实时波形频谱绘制频率直方图

Win7桌面显示音乐波动 - 音频频谱分析仪

Labview波形图 怎么做到不把绘制出来的图像删除 直接在上面绘制新的图形

为啥 librosa 库中的频谱图具有不同的实际音轨持续时间?

音频特效实践

音频特效实践