在 matplotlib 中绘制来自 librosa 的音频

Plotting audio from librosa in matplotlib

我正在尝试绘制 Python 中音频文件的波形图。

这是我的代码(我使用的是 Librosa 库):

import plot as plt

def save_plot(filename):
    y, sr = librosa.load(filename)        
    plt.plot(y, 'audio', 'time', 'amplitude')

plot.py 文件所在位置:

import matplotlib.pylab as plt

def plot(vector, name, xlabel=None, ylabel=None):
    plt.figure()
    plt.plot(vector)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    plt.plot()
    plt.savefig('static/plots/' + name)

奇怪的是,即使我得到的图看起来像一个有效的波形:

音频文件只有5秒长。因此,我不明白 x 轴在说什么;好像涨到90000了?

谢谢

每次对音频文件进行采样时,波形都会有一个数据点,可以从 8000 Hz 到 48 kHz 进行采样。 90,000/5 = 18000 赫兹。

查看您当前从 librosa.load 中忽略的变量,即采样率,它可以让您计算出时间尺度。

这就是您使用 matplotlib.pyplot 绘制矢量的原因,该矢量包含许多项,因为它(可能)每秒采样 22050 个数据点。如果你得到一个 5 秒的音频文件,那么你将得到 5 * 22050 = 110250 个数据点,这些数据点将绘制在图中。您可以使用 librosa:

的正确方法,而不是使用 matplotlib.pyplot
import librosa
import librosa.display

y, sr = librosa.load(<path_audio_file>, sr=<sample_rate>)
fig, ax = librosa.display.waveplot(y, sr=sr)

因为它保留了采样率作为信息,所以它会在正确的时间长度上对时间序列进行归一化!

请注意,要使用 librosa.display,您需要明确导入它。

如果您对更多详细信息感兴趣,请查看 librosa.display.waveplot