如何确保不同音频文件的帧大小一致?

how do I ensure consistent frame size amongst separate audio files?

我目前正在尝试回归网络以提取 MFCC 特征。网络的输入是采样和成帧的音频文件,我似乎在做这件事时遇到了一些问题,或者以某种方式做它以获得一致的输出——这意味着一致的帧大小,因为它不能作为输入对于神经网络。

我目前正在对每个音频文件进行采样和取景:

def load_sound_files(file_paths , data_input):
    raw_sounds = []
    data_output = []
    for fp in file_paths:
        y,sr = librosa.load(fp)
        X = librosa.util.frame(y)
        raw_sounds.append(X)
    return raw_sounds

这意味着每个音频都附加到一个列表中,每个列表中都有一个包含框架音频文件的数组。

[array([[frame],[frame],...,[frame]],dtype=float32), ...]

我试过打印这个

print raw_sounds[0].shape
print raw_sounds[1].shape

得到了这个结果

(2048, 121)
(2048, 96)

但为什么我会得到这个结果?关于取景选项,我没有做任何更改,那么它们为什么不同?

如果没有办法保持一致,那么在输入不一致的情况下,人们将如何训练能够做到这一点的神经网络?

音频文件是不同长度的序列。

有多种方法可以处理可变长度输入。您通常将固定维度的输入多次馈送到神经网络,每个音频帧一次。然后,网络使用 RNN、LSTM 或 seq2seq(不断变化,但在 contrib/seq2seq 中)等架构从序列中学习。您还可以使用简单的 DNN(前馈)架构。

你的结果

(2048, 121)
(2048, 96)

给出帧长和帧数。所以帧大小实际上是一致的 2048 个样本长。两者之间的唯一区别是,第一个声音文件有 121 帧,第二个声音文件有 96 帧。