我正在尝试按照以下说明获取频谱图。
每个音频片段的持续时间为 5 秒。从音频中提取大小相等的帧(连续帧之间有重叠),每个帧由 1024 个样本组成。mel-scale 分为 128 个 bin。因此,音频段的频谱图的尺寸为 192×128。
n_mels=128
据我所知,该指令隐含n_fft=1024
在melspectrogram
功能中。因此,我尝试使用以下代码获取频谱图:
from librosa import load, power_to_db
from librosa.display import specshow
from librosa.feature import melspectrogram
audio_path = r'5s.wav'
y, sr = load(audio_path,sr=44100)
S = melspectrogram(y,sr,n_mels=128,n_fft=1024,hop_length=512)
print(S.shape)
的形状和采样率y
是我得到的频谱图形状是。大小是正确的,但我得到的帧数不是指令中提到的帧数。(220500,)
sr
44100
(128, 431)
128 mel-scale
431
192
为了获得 192 帧,我将采样率更改为22050
并不断调整hop_lenght
直到频谱图有192
帧:
audio_path = r'5s.wav'
y, sr = load(audio_path,sr=22050)
S = melspectrogram(y,sr,n_mels=128,n_fft=1024,hop_length=575)
print(S.shape)
但是,我不确定这是否是获得我想要的频谱图维度的正确方法。似乎这个过程只是反复试验。我想知道是否有更科学的方法来获得具有我想要的形状的频谱图而无需猜测参数值?