Python音频分类代码报错NameError: name 'n_fft' is not defined求助
问题分析与修复方案
缩进错误(触发NameError的核心原因)
Python靠缩进区分代码块,你写的if、else和return语句都没有缩进在get_melspectrogram函数内部,导致else块的代码处于全局作用域,根本无法访问函数参数里的n_fft等变量。函数调用语法错误
在spec=librosa.feature.melspectrogram(...)行末尾多了一个逗号,这会让该行结果变成单元素元组,同时把hop_length、n_mels等本该传给函数的参数拆成了单独的无效语句,完全没起到传参作用。
修复后的完整代码:
import librosa import numpy as np def get_melspectrogram(file_path, sr=None, n_fft=2048, hop_length=512, n_mels=128, fmin=20, fmax=8300, top_db=80): wav, sr = librosa.load(file_path, sr=sr) if wav.shape[0] < 5 * sr: wav = np.pad(wav, int(np.ceil((5*sr - wav.shape[0])/2)), mode='reflect') else: wav = wav[:5*sr] spec = librosa.feature.melspectrogram(wav, sr=sr, n_fft=n_fft, hop_length=hop_length, n_mels=n_mels, fmin=fmin, fmax=fmax) spec_db = librosa.power_to_db(spec, top_db=top_db) return spec_db
不需要使用全局变量,函数参数本身就在函数内部可用,只要保证代码缩进正确、函数调用语法无误即可。
内容的提问来源于stack exchange,提问作者Adil Hydari
相关产品推荐
相关产品推荐

