【问题标题】:Plotting audio from librosa in matplotlib在 matplotlib 中绘制来自 librosa 的音频
【发布时间】:2022-01-31 21:37:18
【问题描述】:

我正在尝试在 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?

谢谢

【问题讨论】:

    标签: python audio matplotlib plot librosa


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!只是为了确保我明白了,我的采样率约为。 22000。这是否意味着,因为我的音频文件是 5 秒,x 轴代表 22000*5 = 110000 个采样,而不是时间?
    • @pk1914 “大约 22000”对于“正常”声音文件的采样率来说是一件奇怪的事情。它恰好是(确切地说)22050 年吗?
    • 你是对的!我想这是一个特殊的数字?为什么这样?谢谢!
    【解决方案2】:

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

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-07
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      相关资源
      最近更新 更多