【发布时间】:2020-03-08 12:10:39
【问题描述】:
我目前正在尝试使用 librosa 来重现一种使用 PRAAT 提取音频文件的 MFCC 的科学方法(深度学习)。我在语音/声学方面没有那么丰富的经验,而且我在理解 PRAAT 时遇到了很多问题 - 所以我开始使用 librosa,它的 API 对我来说更“易于访问”。
论文作者在 MFCC 计算中使用了汉明窗,我尝试在 mfcc 的函数调用中提供该函数作为附加参数或作为字典的 **kwargs 的一部分:
import os
from scipy.signal import get_window
from librosa import load, get_duration
from librosa.feature import mfcc
import pandas
import tables
import matplotlib.pyplot as plt
# ...
kwargs = {"n_fft": 160, "hop_length": 80, "window": get_window("hamming", Nx=160)}
mfccs = mfcc(y=y, sr=sr, S=None, n_mfcc=12, **kwargs)
我还有很多关于声学的知识要学,所以我不太确定这些值,但是(考虑到 API)这应该可以工作。在我的 Windows 计算机上,在我的 Anaconda 环境中运行此命令会导致以下错误:
processing 03a01Fa.wav ...
Traceback (most recent call last):
File "xxx\librosaData.py", line 37, in <module>
mfccs = mfcc(y=y, sr=sr, S=None, n_mfcc=12, **kwargs)
File "C:\Users\xxx\AppData\Local\Continuum\anaconda3\envs\xxx\lib\site-packages\librosa\feature\spectral.py", line 1442, in mfcc
S = power_to_db(melspectrogram(y=y, sr=sr, **kwargs))
File "C:\Users\xxx\AppData\Local\Continuum\anaconda3\envs\xxx\lib\site-packages\librosa\feature\spectral.py", line 1534, in melspectrogram
mel_basis = filters.mel(sr, n_fft, **kwargs)
TypeError: mel() got an unexpected keyword argument 'window'
Process finished with exit code 1
我今天在 MacOS 上尝试了这个(也使用 Anaconda 环境),它没有导致错误。大多数时候我使用 Windows 计算机进行实验,因为我可以使用 CUDA 加速计算。我不确定这是否是与 Librosa 相关的问题,因为我在那里的环境已经遇到了一些其他问题(例如,我无法使用 HDF5 持久化 pandas.DataFrame,但我以某种方式设法自己解决了这个问题。并且Windows 上的 PyCharm 不显示我安装的包 - 尚未修复,但不太重要)。
我不知道是什么导致了这种行为,我真的很想解决这个问题。是否有人遇到相同(或类似)的问题并找到解决方法?
非常感谢。 :-)
编辑: 正如 ZF007 的回答中所建议的那样,我尝试在(另一台/我的私人)Windows 计算机上运行以下脚本:
import librosa
from scipy.signal import get_window
y, sr = librosa.load('audio/01-01-01-01-01-01-01.mp4',)
meltspec_args = {"n_fft": 160, "hop_length": 80, "window": get_window("hamming", 160)}
mfccs = librosa.feature.mfcc(y=y, sr=sr, S=None, n_mfcc=12, **meltspec_args)
print(mfccs.shape)
但它仍然遇到同样的错误。
Edit2:我创建了一个 git 存储库来共享代码和配置 (https://github.com/Keanri828/librosa_mfcc_WindowsError)。
【问题讨论】:
-
嗨,你找到解决这个问题的方法了吗?
-
遗憾的是没有。在我寻找解决方案的过程中,我浪费了几天的时间。我不确定这是 Python 还是 Librosa 问题。 'window' 不应传递给 mel-filter-function。我不知道为什么在 Windows 和 Google Collab 上会发生这种情况(在你的情况下)。
-
发布“完整”工作示例代码并链接到您的 yml 文件,以便人们重新创建您的 conda env。 (来自评论)。
-
谢谢。我不知道我今天是否可以发布它,因为我目前正在做另一个项目,我今天没有太多时间。由于重构,我的代码发生了变化,自 12 月我的论文截止日期以来我没有碰过它。我需要一点时间来编写一个小而完整的工作示例并在下面测试您的建议。
-
n.v.m.. 错误在于将
Nx=160解析为 get_window(str, int, kwarg1) 函数。请参阅我的更新答案。
标签: python scipy anaconda librosa mfcc