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

从Mel频谱图重建音频时遭遇TypeError错误求助

解决Mel频谱图重建音频时的TypeError及逻辑问题

问题背景

已将Mel频谱图保存为spectogram.npy,使用以下Python代码读取并重建WAV文件,但运行时出现错误:

import numpy
import librosa
array = numpy.load("C:\\Users\\aweso\\meltowav\\spectogram.npy")
print(array)

spec = librosa.feature.melspectrogram(y=array,
sr=16000,
n_fft=2048,
hop_length=512,
win_length=None,
window='hann',
center=True,
pad_mode='reflect',
power=2.0,
n_mels=25)

res = librosa.feature.inverse.mel_to_audio(spec,
sr=16000,
n_fft=2048,
hop_length=512,
win_length=None,
window='hann',
center=True,
pad_mode='reflect',
power=2.0,
n_iter=32)

import soundfile as sf
sf.write("test1.wav", res, 16000)

报错信息

Traceback (most recent call last):
  File "c:\Users\aweso\meltowav\main.py", line 6, in <module>
    spec = librosa.feature.melspectrogram(y=array,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Roaming\Python\Python311\site-packages\lazy_loader\__init__.py", line 77, in __getattr__
    submod = importlib.import_module(submod_path)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\librosa\feature\spectral.py", line 15, in <module>
    from ..core.audio import zero_crossings
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\librosa\core\audio.py", line 1158, in <module>
    @guvectorize(
     ^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\decorators.py", line 203, in wrap
    guvec.add(fty)
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\gufunc.py", line 64, in add
    self.gufunc_builder.add(fty)
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\ufuncbuilder.py", line 258, in add
    cres, args, return_type = compile_element_wise_function(
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\ufuncbuilder.py", line 176, in compile_element_wise_function
    cres = nb_func.compile(sig, **targetoptions)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\ufuncbuilder.py", line 124, in compile
    return self.compile_core(sig, flags, locals)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\ufuncbuilder.py", line 151, in compile_core
    cres = self.cache.load_overload(sig, targetctx)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\caching.py", line 633, in load_overload
    target_context.refresh()
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\base.py", line 267, in refresh
    self.load_additional_registries()
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\cpu.py", line 99, in load_additional_registries
    numba.core.entrypoints.init_all()
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\entrypoints.py", line 48, in init_all
    eps = importlib_metadata.entry_points()
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\__init__.py", line 1040, in entry_points
    return SelectableGroups.load(eps).select(**params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\__init__.py", line 476, in load
    ordered = sorted(eps, key=by_group)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\__init__.py", line 1037, in <genexpr>
    eps = itertools.chain.from_iterable(
          ^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\_itertools.py", line 16, in unique_everseen
    k = key(element)
        ^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\__init__.py", line 954, in normalized_name
    or super().normalized_name
       ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\__init__.py", line 627, in normalized_name
    return Prepared.normalize(self.name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata\__init__.py", line 882, in normalize
    return re.sub(r"[-.]+", "-", name).lower().replace('-', '')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\re\__init__.py", line 185, in sub
    return _compile(pattern, flags).sub(repl, string, count)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: expected string or bytes-like object, got 'NoneType'

问题分析与解决方案

1. 修复代码逻辑错误

原代码存在核心逻辑错误:librosa.feature.melspectrogram()的y参数要求输入原始音频波形数据,而非Mel频谱图。你已经保存了Mel频谱图数组,直接将其传入mel_to_audio()即可重建音频,无需再调用melspectrogram()。修改后的代码如下:

import numpy as np
import librosa
import soundfile as sf

# 加载保存的Mel频谱图数组
mel_spec = np.load("C:\\Users\\aweso\\meltowav\\spectogram.npy")
print("Mel频谱图形状:", mel_spec.shape)

# 直接从Mel频谱图重建音频
res = librosa.feature.inverse.mel_to_audio(
    mel_spec,
    sr=16000,
    n_fft=2048,
    hop_length=512,
    win_length=None,
    window='hann',
    center=True,
    pad_mode='reflect',
    power=2.0,
    n_iter=32
)

# 保存重建后的音频文件
sf.write("test1.wav", res, 16000)

2. 解决numba相关的TypeError

如果修复逻辑后仍出现原错误,该问题源于numba与Python 3.11的importlib.metadata模块兼容性问题,可通过以下方式解决:

  • 降级Python版本至3.10:numba对Python 3.11的支持在早期版本中存在缺陷,降级到3.10可直接规避该问题
  • 升级numba至最新稳定版:执行命令pip install --upgrade numba
  • 重新安装依赖包:先卸载再重装,确保依赖版本匹配
    pip uninstall -y numba librosa
    pip install numba librosa
    
  • 清理pip缓存后重装:若存在损坏的包缓存,执行以下命令
    pip cache purge
    pip install numba librosa
    

内容的提问来源于stack exchange,提问作者Andy K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:45:55