如何确保单独音频文件中的帧大小一致?

时间:2016-11-06 13:47:31

标签: python python-2.7 audio tensorflow librosa

我目前正在尝试回归网络以提取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)

但为什么我得到这个结果?我没有改变有关框架选项的任何内容,为什么它们不同?

如果没有办法让它保持一致,怎么会训练一个能够做到这一点的神经网络,输入不一致?

2 个答案:

答案 0 :(得分:1)

您的结果

(2048, 121)
(2048, 96)

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

答案 1 :(得分:0)

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

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