您好,我目前正在将Librosa用于我正在从事的音频项目,我想知道如何在音频文件中的特定时间范围内获得频率的幅度。我不知道它是否简单明了,但我在网上看了却找不到任何东西。我知道您可以产生一个频谱图,但是如何获取给定时间戳下的频率振幅等信息?
编辑:我的意思是时间戳上的振幅。
答案 0 :(得分:0)
频谱图是离散的时频表示。在librosa中,频率点沿第一轴,而时间沿第二轴。频率仓取决于所选的FFT数量,时间仓取决于跳跃长度。
以下示例显示了如何获取频谱图中给定位置的振幅以及该位置的相关时间和频率。
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])
类似地,您可以从频率和时间转到频谱图中的索引。但是,由于它已离散化,因此您始终必须舍入到最接近的索引。