【问题标题】:How to change x-axis from samples/frames to time?如何将 x 轴从样本/帧更改为时间?
【发布时间】:2017-11-12 01:10:09
【问题描述】:

我需要将此图表上的 x 轴从“样本”更改为时间:

我使用这个过程创建了图表:

y, _ = librosa.load('sound/data/kea-song.mp3', 48000)
y /= y.max()

# compute the rmse
e = librosa.feature.rmse(y=y)[0]
e -= e.min()#what does this really do, guessing a kind of normalisation?
e /= e.max()
plt.plot(e)
plt.show()

如果我不计算 rmse,这会将 x 轴转换为时间:

y, _ = librosa.load('sound/data/kea-song.mp3', 48000)
plt.plot(np.arange(len(y))/48000, y)

但是在 rmse 函数之后,我不知道如何进行转换。我猜这与将 y* 中的样本分组到帧中有关,但我终生无法弄清楚如何将这些帧(如果是帧)转换为时间!

我该怎么做? 提前致谢(:

  • 这是 plt.plot(y) 的图:

【问题讨论】:

    标签: matplotlib signal-processing


    【解决方案1】:

    我没有对此进行任何测试,但通过阅读文档,该函数似乎在默认帧长度为 2048 个样本和跳数为 512 个样本的帧中计算 FFT。

    这意味着如果原始音频中有len(y) 样本,则输出中应该有(len(y)-2048)//512 帧。第一帧将在样本 0,第二帧在样本 512,依此类推。所以你可以这样做:

    e_time = np.arange(len(e))*512/48000
    plt.plot(e_time, e)
    

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2020-08-04
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      相关资源
      最近更新 更多