【问题标题】:Why spectrogram from librosa library have twice the time duration of the actual audio track?为什么 librosa 库中的频谱图的持续时间是实际音轨的两倍?
【发布时间】:2018-07-12 12:07:59
【问题描述】:

我正在使用以下代码从录制的大约 30 秒的音频信号中获取梅尔谱图:

spectrogram =  librosa.feature.melspectrogram(y=self.RawSamples,sr=self.SamplingFrequency, n_mels=128, fmax=8000)

    if show:
        plt.figure(figsize=(10, 4))
        librosa.display.specshow(librosa.power_to_db(self.Spectrogram, ref=np.max), y_axis='mel', fmax=8000, x_axis='time')
        plt.colorbar(format='%+2.0f dB')
        plt.title('Mel spectrogram')
        plt.tight_layout()

获得的频谱图:Mel spectrogram

你能解释一下为什么时间轴描绘了两倍的持续时间(应该是 30 秒)。代码出了什么问题?

【问题讨论】:

  • 你的原始样本是来自立体声文件吗?
  • 是的,这是一个立体声wav文件@PaulR
  • OK - 因此,如果您将样本视为单个通道,那么您将获得两倍的持续时间。
  • 您知道在从 librosa 调用频谱图方法时是否需要设置任何属性以避免这种情况?顺便说一句,非常感谢您的回答,这对@PaulR 很有帮助
  • 我不熟悉特定的库,但是提取单个(左或右)通道或将两个通道组合成单个(单)通道应该相当简单,然后处理。

标签: python audio spectrogram librosa


【解决方案1】:

您需要将采样率传递给librosa.display.specshow (sr=self.SamplingFrequency)。如果不是,则默认为 20050,如果 self.SamplingFrequency 是不同的值,则会显示错误的长度。

【讨论】:

  • 我正在以 12000 的采样率工作 90 秒。频谱图显示了错误的持续时间,但频谱图本身实际上是正确的,对吧?
  • 很有可能。但最好将正确的选项传递给 specshow 以验证事情是否符合您的预期
  • 我的代码是这样的
    data, sr = librosa.load(file_name, sr=None, duration=90)
    D = librosa.amplitude_to_db(np.abs(librosa.stft(data)), ref=np.max)
    librosa.display.specshow(D, y_axis='linear', x_axis='time', sr=12000)
    我是不是传错了?
  • 看起来差不多。但是,如果您有问题,您应该提出一个新问题
  • 现在频谱图显示正确的持续时间但错误的采样率:(。无论如何谢谢你:)
【解决方案2】:

您的librosa.display.spechow 应包含以下参数:采样率sr=<your_sampling_rate> 以及跳数大小hop_size=<your_hop_size>。这些参数的默认值分别为 22050 和 512。未正确设置它们会导致生成的频谱图中的 x 轴不正确。

参考:http://man.hubwiz.com/docset/LibROSA.docset/Contents/Resources/Documents/generated/librosa.display.specshow.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2011-01-28
    • 2016-06-08
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多