Librosa(Python)到Meyda(Node.js)的转换

1 人关注

我正在将一个Python程序转换为Node.js,该程序遵循以下步骤。

  • 麦克风用回调进行监听
  • 回调做Librosa "log_mel_S "提取
  • "log_mel_S "由人工智能模型进行推理
  • 声音被贴上标签
  • 我已经设法将所有的步骤和它们的关系从Python翻译成Node.js,除了Librosa的提取。 这将是一个关于所需的音频形状和类型的例子。

    audio_sample = numpy.zeros(shape=(1024, 100), dtype=numpy.float32)
    

    而这是我需要帮助翻译的Librosa作品。

    S = numpy.abs(librosa.stft(y=audio_sample, n_fft=1024, hop_length=500)) ** 2
    mel_S = numpy.dot(librosa.filters.mel(sr=44100, n_fft=1024, n_mels=64), S).T
    log_mel_S = librosa.power_to_db(mel_S, ref=1.0, amin=1e-10, top_db=None)
    

    我发现了这个包Meyda,它看起来可以作为一个很好的替代品,但我不确定我应该如何处理这个问题,我不清楚从Librosa中提取的是什么,所以我无法识别像Amplitude SpectrumPower Spectrum ,等术语。 请帮助我理解和翻译这一行动。

    python
    node.js
    audio
    signal-processing
    librosa
    belferink1996
    belferink1996
    发布于 2021-08-16
    1 个回答
    Anatoly T
    Anatoly T
    发布于 2021-08-21
    已采纳
    0 人赞同

    TL;DR Amplitude Spectrum 基本上是信号的FFT,而 Power Spectrum Amplitude Spectrum 的平方值,有时也被称为能量。 下面是Meyda网站上的一个例子,它是计算 Amplitude Spectrum https://github.com/catalli/audiotrainer-server/blob/df41322906c88cd6f899e8f9b9661ebb949f72e1/index.js#L17

    现在,让我们逐行查看你的代码样本,弄清楚它在做什么以及如何在javascript中实现它。

  • S = numpy.abs(librosa.stft(y=audio_sample, n_fft=1024, hop_length=500)) ** 2
  • 这是在计算音频样本y的1024个bins fft的平方值,这基本上是一个 Power Spectrum 或一个 Amplitude Spectrum 的平方值。请注意,复数的 abs 是一个矢量的长度。 sqrt(real_part^2 + img_part^2)

  • mel_S = numpy.dot(librosa.filters.mel(sr=44100, n_fft=1024, n_mels=64), S).T
  • 这是一个mfcc计算,基本上是一个预定义的滤波器组和fft平方的乘积。

  • log_mel_S = librosa.power_to_db(mel_S, ref=1.0, amin=1e-10, top_db=None)
  •