报错
当笔者运行代码train_val.iloc[idx].name) + ".wav"
时,
报错:UFuncTypeError: ufunc 'add' did not contain a loop with signature matching types (dtype('<U21'), dtype('<U21')) -> dtype('<U21')
查阅资料,大家说是因为数字和字符串格式不匹配导致的。比如这位博主写到的:Pandas | TypeError: ufunc ‘add‘ did not contain a loop with signature matching types dtype(‘<U21‘)…。
检查了一下,我的音乐文件命名均是数字名,所以train_val.iloc[idx].name)
的结果是数字,与".wav"
字符串相加就会报错。
解决
于是,我将报错代码
train_val.iloc[idx].name)+ “.wav”
修改为:
str( train_val.iloc[idx].name ) + “.wav”
报错解决!
附:提取音乐文件的MFCC特征的代码
import librosa
from tqdm.notebook import tqdm
import os
data_dir = 'audio_path' # eg:'../dataset/'
# 训练音频的MFCC提取
tr_mfcc_vec = []
for idx in tqdm(range(len(train_val))):
y, _ = librosa.load(os.path.join(data_dir, str(train_val.iloc[idx].name) + ".wav"), sr=22050)
mfcc = librosa.feature.mfcc(y=y, sr=22050, n_fft=1024, hop_length=512, win_length=1024)
tr_mfcc_vec.append(mfcc)
# 测试音频的MFCC提取
te_mfcc_vec = []
for idx in tqdm(range(len(test))):
y, _ = librosa.load(os.path.join(data_dir, str(test.iloc[idx].name) + ".wav"), sr=22050)
mfcc = librosa.feature.mfcc(y=y, sr=22050, n_fft=1024, hop_length=512, win_length=1024)
te_mfcc_vec.append(mfcc)