从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
相关产品推荐
相关产品推荐

