Librosa (Python) 到 Meyda (Node.js) 转换
Librosa (Python) to Meyda (Node.js) conversion
我正在将 Python 程序转换为 Node.js,程序遵循以下步骤:
- 麦克风通过回调监听
- 回调执行 Librosa“log_mel_S”提取
- “log_mel_S”由 AI 模型推断
- 声音被标记
我已经设法将所有步骤及其相关步骤从 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)
我找到了 this package Meyda,看起来它可以作为一个很好的替代品,但我不确定我应该如何处理这个问题,我不清楚从 Librosa 中提取了什么,所以我不能识别 Amplitude Spectrum
、Power Spectrum
等术语。
请帮助我理解和翻译这个动作。
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
这是计算 audio_sample y 的 1024 个 bins fft 的平方值,基本上是 Power Spectrum
或 Amplitude Spectrum
的平方。请注意,复数的abs
是一个向量lenth: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)
最后一个会将结果转换为分贝 (dB) 单位 (10 * log10(S / ref)
)
i will extend this answer with js code-sample later, submitting it now because i think it will be helpful already as it is
我正在将 Python 程序转换为 Node.js,程序遵循以下步骤:
- 麦克风通过回调监听
- 回调执行 Librosa“log_mel_S”提取
- “log_mel_S”由 AI 模型推断
- 声音被标记
我已经设法将所有步骤及其相关步骤从 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)
我找到了 this package Meyda,看起来它可以作为一个很好的替代品,但我不确定我应该如何处理这个问题,我不清楚从 Librosa 中提取了什么,所以我不能识别 Amplitude Spectrum
、Power Spectrum
等术语。
请帮助我理解和翻译这个动作。
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
这是计算 audio_sample y 的 1024 个 bins fft 的平方值,基本上是 Power Spectrum
或 Amplitude Spectrum
的平方。请注意,复数的abs
是一个向量lenth: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)
最后一个会将结果转换为分贝 (dB) 单位 (10 * log10(S / ref)
)
i will extend this answer with js code-sample later, submitting it now because i think it will be helpful already as it is