如何根据音频长度确定频谱图的图像大小



我正在使用图像教程 1 遵循 fastai 音频分类。对于长度为 4 秒的 URBANSOUND 数据集,图像大小为 230x224。我正在使用长度为 10 秒的 DCASE 音频数据集。那么,在librosa中,图像的大小是如何根据音频的长度决定的呢?

以下是用于生成谱图的代码。

def create_fold_spectrograms(fold):
spectrogram_path = Path('spectrogram/')  
audio_path = Path('audio/')  
print(f'Processing fold {fold}')
os.mkdir(spectrogram_path/fold)
for audio_file in list(Path(audio_path/f'{fold}').glob('*.wav')):
samples, sample_rate = librosa.load(audio_file)
fig = plt.figure(figsize=[0.72,0.72])
ax = fig.add_subplot(111)
ax.axes.get_xaxis().set_visible(False)
ax.axes.get_yaxis().set_visible(False)
ax.set_frame_on(False)
filename  = spectrogram_path/fold/Path(audio_file).name.replace('.wav','.png')
filename = (str(filename))
S = librosa.feature.melspectrogram(y=samples, sr=sample_rate)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max))
plt.savefig(filename, dpi=400, bbox_inches='tight',pad_inches=0)
plt.close('all')

使用 librosa 创建频谱图时,您基本上将音频(1d 数据(切成重叠的段,并计算每个段的频率内容。

每个段的长度由频谱图调用的n_fft参数确定。两个后续段的重叠程度取决于hop_length参数。默认情况下,librosa使用n_fft=2048hop_length=512,因此后续段之间有75%的重叠。

请注意,这些段通常称为

您的问题归结为给定长度的音频获得多少帧(图像长度(。

假设您有音频N=10s。这意味着您有N * sample_rate样本。hop_length为 512 时,您可以大致获得(这也取决于填充和您的n_fft((N * sample_rate) / hop_length帧。

因此,对于您的 10 秒,您会得到大约 430 帧,因为默认情况下 librosa 使用 22050 Hz 的采样率。

高度,即您的频率分辨率,仅取决于您决定使用的 mel 频段的数量。可以通过将n_mels参数传递给melspectrogram函数来操作它。

最新更新