Ошибка возврата преобразования MFCC «TypeError: ожидаемая строка или байтовый объект, получен «NoneType»»

У меня есть мел-спектограмма, сохраненная в массиве numpy (в файле с именем spectogram.npy). В той же папке у меня есть файл main.py. По сути, эта программа на Python должна взять эту спектрограмму, а затем восстановить из нее wav-файл. Я использую пакет librosa и некоторый код, который я нашел при переполнении стека, чтобы проверить это.

main.py

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 getattrsubmod = importlib.import_module(submod_path)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib_init_.py", line 126, in import_modulereturn _bootstrap._gcd_import(name[level:], package, level)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1204, in _gcd_importFile 
"<frozen importlib._bootstrap>", line 1176, in _find_and_loadFile 
"<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlockedFile 
"<frozen importlib._bootstrap>", line 690, in _load_unlockedFile 
"<frozen importlib._bootstrap_external>", line 940, in exec_moduleFile 
"<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 wrapguvec.add(fty)
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\gufunc.py", line 64, in addself.gufunc_builder.add(fty)
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\np\ufunc\ufuncbuilder.py", line 258, in addcres, 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_functioncres = 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 compilereturn 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_corecres = 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_overloadtarget_context.refresh()
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\base.py", line 267, in refreshself.load_additional_registries()
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\cpu.py", line 99, in load_additional_registriesnumba.core.entrypoints.init_all()
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\site-packages\numba\core\entrypoints.py", line 48, in init_alleps = importlib_metadata.entry_points()^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata_init.py", line 1040, in entry_pointsreturn SelectableGroups.load(eps).select(**params)^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata_init.py", line 476, in loadordered = 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_everseenk = key(element)^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata_init.py", line 954, in normalized_nameor super().normalized_name^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata_init.py", line 627, in normalized_namereturn Prepared.normalize(self.name)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\importlib\metadata_init.py", line 882, in normalizereturn re.sub(r"[-.]+", "-", name).lower().replace('-', '')^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\aweso\AppData\Local\Programs\Python\Python311\Lib\re_init.py", line 185, in subreturn _compile(pattern, flags).sub(repl, string, count)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^TypeError: expected string or bytes-like object, got 'NoneType'

Я пробовал переписать свой код, но не нашел в нем ничего плохого. Я также распечатал содержимое спектрограммы и подтвердил, что она не пуста.

Я ничего не знаю об этой библиотеке, но, глядя на ваш вызов, я вижу, что вы указываете win_length как None; но документ говорит, что этот параметр имеет значение по умолчанию. Возможно, вы отменяете значение по умолчанию, указав явное значение «Нет»? Я бы попробовал просто удалить этот аргумент из вызова мелспектрограммы.

Don R 15.06.2024 01:25

Только что попробовал, все равно получаю ту же ошибку.

Andy K 15.06.2024 01:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, ты сделал мел-спектрограмму дважды. Он уже есть в spectogram.npy.

import librosa
import numpy as np
import soundfile as sf


audio_path = librosa.example('example.wav')
y, sr = librosa.load(audio_path, sr=None)

mel_spectrogram = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)

np.save('mel_spectrogram.npy', mel_spectrogram)

loaded_mel_spectrogram = np.load('mel_spectrogram.npy')

mel_to_audio = librosa.feature.inverse.mel_to_audio

y_restored = mel_to_audio(loaded_mel_spectrogram, sr=sr, n_iter=32)

sf.write('restored_audio.wav', y_restored, sr)

этот код сохраняет спектрограмму аудио мела, а затем восстанавливает ее, на рисунке ниже показан результат

Спасибо, это сработало и очень быстро (~ 10 секунд для двухминутного аудио!).

Andy K 12.07.2024 13:30

Другие вопросы по теме