2

我正在尝试按照以下说明获取频谱图。

每个音频片段的持续时间为 5 秒。从音频中提取大小相等的帧(连续帧之间有重叠),每个帧由 1024 个样本组成。mel-scale 分为 128 个 bin。因此,音频段的频谱图的尺寸为 192×128。

n_mels=128据我所知,该指令隐含n_fft=1024melspectrogram 功能中。因此,我尝试使用以下代码获取频谱图:

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,)sr44100(128, 431)128 mel-scale431192

为了获得 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)

但是,我不确定这是否是获得我想要的频谱图维度的正确方法。似乎这个过程只是反复试验。我想知道是否有更科学的方法来获得具有我想要的形状的频谱图而无需猜测参数值?

4

1 回答 1

0

如果您将y_shape长度除以hop_length-- 您将获得帧数:

220500 / 512 = 430.6

如果您需要 192 帧,请193 * 512 = 98816y.

于 2018-07-09T12:00:18.250 回答