Я извлекаю MFCC из аудиофайла с помощью функции Librosa (librosa.feature.mfcc) и правильно возвращаю массив numpy с формой, которую я ожидал: 13 значений MFCC для всей длины аудиофайла, который составляет 1292 окна (в 30 секунд).
Чего не хватает, так это информации о времени для каждого окна: например, я хочу знать, как выглядит MFCC во время 5000 мс, затем 5200 мс и т. д. Должен ли я вручную рассчитывать время? Есть ли способ автоматически получать точное время для каждого окна?
ок, спасибо.. я так и подозревал :(
Это очень просто, я могу скинуть вам пример, если хотите.
Ну, если не бросишь... :)
«Информация о времени» недоступна напрямую, так как зависит от частоты дискретизации. Чтобы предоставить такую информацию, 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
Вы должны рассчитать его самостоятельно.