Спектрограмма представляет собой дискретное частотно-временное представление.В либрозе частотные бины расположены вдоль первой оси, а время - вдоль второй оси.Частотные интервалы зависят от количества выбранных БПФ, а временные интервалы зависят от длины скачка.
В следующем примере показано, как получить амплитуду в заданном месте на спектрограмме, а также соответствующее время и частотуэто местоположение.
import librosa
import numpy
filename = librosa.util.example_audio_file()
y, sr = librosa.load(filename)
n_fft = 1024
hop_length = 512
spec = numpy.abs(librosa.core.stft(y, n_fft=n_fft, hop_length=hop_length))
freqs = librosa.core.fft_frequencies(n_fft=n_fft)
times = librosa.core.frames_to_time(spec[0], sr=sr, n_fft=n_fft, hop_length=hop_length)
print('spectrogram size', spec.shape)
fft_bin = 14
time_idx = 1000
print('freq (Hz)', freqs[fft_bin])
print('time (s)', times[time_idx])
print('amplitude', spec[fft_bin, time_idx])
Точно так же вы можете перейти от частоты и времени к индексу в спектрограмме.Но так как он был дискретизирован, вы всегда должны округляться до ближайшего индекса.