У меня есть несколько аудио разной длительности.Поэтому я не знаю, как обеспечить одинаковое количество N сегментов аудио.Я пытаюсь реализовать существующую статью, поэтому сказано, что сначала выполняется Log Mel-Spectrogram во всем аудио с 64 банками Mel-фильтров от 20 до 8000 Гц с использованием окна Хэмминга 25 мс и перекрытия 10 мс,Затем, чтобы получить это, у меня есть следующие строки кода:
y, sr = librosa.load(audio_file, sr=None)
#sr = 22050
#len(y) = 237142
#duration = 5.377369614512472
n_mels = 64
n_fft = int(np.ceil(0.025*sr)) ## I'm not sure how to complete this parameter
win_length = int(np.ceil(0.025*sr)) # 0.025*22050
hop_length = int(np.ceil(0.010*sr)) #0.010 * 22050
window = 'hamming'
fmin = 20
fmax = 8000
S = librosa.core.stft(y, n_fft=n_fft, hop_length=hop_length, win_length=win_length, window=window, center=False)
M = np.log(librosa.feature.melspectrogram(y=y, sr=sr, S=S, n_mels=n_mels,fmin=fmin, fmax=fmax)#, kwargs=M)
+ 1e-6)
# M.shape = (64, 532)
(Также я не уверен, как завершить этот параметр n_fft.) Затем сказано:
Используйте контекстное окно из 64 кадров, чтобы разделить весь журнал Mel-спектрограммы на аудиосегменты размером 64x64.Во время сегментации используется размер сдвига в 30 кадров, т.е. два соседних сегмента перекрываются 30 кадрами.Следовательно, каждый разделенный сегмент имеет длину 64 кадра, а его продолжительность составляет 10 мс x (64-1) + 25 мс = 655 мс.
Итак, я застрял в этой последней части,Я не знаю, как выполнить сегментацию M на 64x64.И как я могу получить одинаковое количество сегментов для всех аудио (с разной длительностью), потому что в финале мне понадобятся функции 64x64xN в качестве входных данных для моей нейронной сети или классификатора?Я буду очень признателен за любую помощь!Я новичок в обработке аудио сигналов.