Получите информацию о времени из MFCC, сгенерированную с помощью librosa.feature.mfcc.

Я извлекаю MFCC из аудиофайла с помощью функции Librosa (librosa.feature.mfcc) и правильно возвращаю массив numpy с формой, которую я ожидал: 13 значений MFCC для всей длины аудиофайла, который составляет 1292 окна (в 30 секунд).

Чего не хватает, так это информации о времени для каждого окна: например, я хочу знать, как выглядит MFCC во время 5000 мс, затем 5200 мс и т. д. Нужно ли мне вручную рассчитывать время? Есть ли способ автоматически получать точное время для каждого окна?

:


person GiulioG    schedule 11.12.2020    source источник
comment
Вы должны рассчитать его самостоятельно.   -  person Lukasz Tracewski    schedule 11.12.2020
comment
ок, спасибо.. я так и подозревал :(   -  person GiulioG    schedule 11.12.2020
comment
Это очень просто, я могу скинуть вам пример, если хотите.   -  person Lukasz Tracewski    schedule 11.12.2020
comment
Ну, если не бросишь... :)   -  person GiulioG    schedule 11.12.2020


Ответы (1)


Информация о времени недоступна напрямую, так как она зависит от частоты дискретизации. Чтобы предоставить такую ​​информацию, librosa пришлось бы создавать свои собственные классы. Это скорее загрязнит интерфейс и сделает его гораздо менее интероперабельным. В текущей реализации feature.mfcc возвращает вам numpy.ndarray, что означает, что вы можете легко интегрировать этот код куда угодно в Python.

Чтобы связать MFCC с синхронизацией:

import librosa
import numpy as np

filename = librosa.util.example_audio_file()
y, sr = librosa.load(filename)

hop_length = 512 # number of samples between successive frames
mfcc = librosa.feature.mfcc(y=y, n_mfcc=13, sr=sr, hop_length=hop_length)

audio_length = len(y) / sr # in seconds
step = hop_length / sr # in seconds
intervals_s = np.arange(start=0, stop=audio_length, step=step)

print(f'MFCC shape: {mfcc.shape}')
print(f'intervals_s shape: {intervals_s.shape}')
print(f'First 5 intervals: {intervals_s[:5]} second')

Обратите внимание, что длина массива mfcc и intervals_s одинакова — проверка работоспособности, что мы не ошиблись в наших вычислениях.

MFCC shape: (13, 2647) 
intervals_s shape: (2647,)
First 5 intervals: [0.         0.02321995 0.04643991 0.06965986 0.09287982] second
person Lukasz Tracewski    schedule 12.12.2020