我目前正在尝试使用librosa来复制一种科学方法(深度学习),该方法使用PRAAT来提取音频文件的MFCC。我在语音学/声学方面经验不太丰富,并且在理解PRAAT方面遇到了很多问题,因此我开始使用librosa,其API对我更具“可访问性”。
文章作者在MFCC计算中使用了汉明窗口,我尝试将该函数作为mfcc函数调用的附加参数或作为**kwargs字典的一部分提供。
我今天在MacOS上尝试了这个,也是使用Anaconda环境,并且没有引起任何错误。大多数时候我都在Windows计算机上进行实验,因为可以使用CUDA加速计算。我不确定这是否是与Librosa相关的问题,因为我在那里已经遇到了一些其他环境问题(例如,我无法使用HDF5持久化pandas.DataFrame,但我设法自己解决了这个问题。而Windows上的PyCharm无法显示我安装的软件包——尚未解决,但不太重要)。
我不知道是什么原因导致了这种行为,我真的很想解决这个问题。有人遇到过相同(或类似)的问题并找到了解决方法吗?
非常感谢。:-)
编辑: 如ZF007的回答所建议的,我在(另一个/我的私人)Windows计算机上尝试运行了以下脚本:
文章作者在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)。
Nx=160
解析到 get_window(str, int, kwarg1) 函数中。请查看我的更新答案。 - ZF007