Librosa:在Windows上无法为mfcc提供窗口函数

5
我目前正在尝试使用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)

但它仍然遇到了相同的错误。

编辑2:我创建了一个Git存储库来共享代码和配置(https://github.com/Keanri828/librosa_mfcc_WindowsError)。


嗨,你找到这个问题的解决方案了吗? - Milos Milunovic
很遗憾,我在论文期间花费了数天时间寻找解决方案。我不确定这是Python还是Librosa的问题。'window'不应该传递到mel-filter函数中。我不知道为什么在Windows和Google Collab(在你的情况下)会出现这种情况。 - Keanri
请发布“完整”的工作示例代码,并提供您的yml文件链接,以便其他人可以重新创建您的conda环境。(来自评论) - ZF007
2
谢谢。我不确定今天能否发布,因为我正在处理另一个项目,今天没有太多时间。由于重构,我的代码已经改变,自去年12月论文截止日期以来我就没有再碰它了。我需要一点时间编写一个小但完整的工作示例,并测试您下面的建议。 - Keanri
n.v.m.。错误在于将 Nx=160 解析到 get_window(str, int, kwarg1) 函数中。请查看我的更新答案。 - ZF007
我在GitHub上创建了一个仓库,用于分享代码和yml文件:https://github.com/Keanri828/librosa_mfcc_WindowsError - Keanri
1个回答

2
所以...我终于知道为什么会发生这种情况,因为我在librosa存储库中打开了一个问题(https://github.com/librosa/librosa/issues/1060):
由于Conda在安装时错误地安装了0.6.3而不是>0.7,因此支持这些参数的版本是从0.7开始的。由于我今天才安装了Anaconda,我尴尬地没有将这台电脑和我的Mac(使用0.7.1而没有任何安装问题)之间的版本进行比较。
这似乎是一个尚未解决的软件包问题。
我会随时更新这个“答案”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接