You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:50:17