Python 为什么每一帧的长度不相等?

Python 为什么每一帧的长度不相等?,python,python-2.7,audio,librosa,Python,Python 2.7,Audio,Librosa,我目前正在对一些音频文件进行采样和设置框架,以便将其作为神经网络的输入。我用它来采样音频和帧,尤其是帧是非常重要的,因为这是作为神经网络需要的输入,这意味着长度必须一致,这似乎是我目前的问题。框架 我目前正在进行如下采样和取景: def load_sound_files(file_paths , data_input): raw_sounds = [] data_output = [] for fp in file_paths: y,sr = libros

我目前正在对一些音频文件进行采样和设置框架,以便将其作为神经网络的输入。我用它来采样音频和帧,尤其是帧是非常重要的,因为这是作为神经网络需要的输入,这意味着长度必须一致,这似乎是我目前的问题。框架

我目前正在进行如下采样和取景:

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), ...]
中的每个音频文件都附加到一个列表中,对于列表中的每个条目,每个帧都有一个数组。因此,原始声音中的信息存储如下:

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 len(raw_sounds)
print len(raw_sounds[0])
print len(raw_sounds[0][0])
print len(raw_sounds[0][1])
print '\n'
print len(raw_sounds[1])
print len(raw_sounds[1][0])
print len(raw_sounds[1][1])
哪些产出:

270
2048
121
121


96
96
我设置的不正确吗?还是我做错了什么

原始样品:

[array([[ -1.58969939e-04,   2.85098387e-04,   2.57675620e-05,
          5.58408792e-04,   2.09050399e-04,   3.10504751e-04,
          7.08066545e-06,   6.51864902e-05,   4.64069366e-04,
         -1.03915379e-04,  -2.09252365e-04,   9.58807232e-06,
         -3.70743481e-04,  -2.73781188e-04,   1.47478888e-03,
         -1.24523379e-02,  -1.38171474e-02,   1.42919633e-03,
          2.60417676e-03,  -9.49124712e-03,   1.84055939e-02,
          5.30609104e-04,  -2.02661729e-03,  -1.09214883e-03,
         -2.67810683e-04,  -9.33001807e-04,   1.57146193e-02,
          3.06987576e-02,  -2.89204344e-02,   8.31141882e-03,
         -5.22559392e-04,   9.57424170e-04,  -1.39959985e-02,
         -2.45519826e-04,   7.94889964e-03,  -2.45057382e-02,
          2.76992898e-02,   2.75033060e-03,   1.91110268e-03,
          2.65958859e-03,   4.22360376e-04,   2.87338579e-03,
          3.60440137e-03,  -6.81304885e-03,   1.19333845e-02,
          5.27647883e-03,  -8.81725773e-02,  -1.10511519e-02,
          1.67427063e-02,   4.18979749e-02,  -1.76561251e-02,
          1.40228057e-02,  -6.56250417e-02,   8.04386102e-04,
          6.77016005e-03,   8.95334259e-02,  -3.07568144e-02,
         -5.68932574e-03,   2.80798669e-03,  -1.94037147e-03,
         -6.80876488e-04,  -7.51503045e-04,   1.61860569e-03,
         -8.96663638e-04,   1.05839630e-03,   4.16457013e-04,
         -1.14849303e-03,   2.51941121e-04,   1.09347668e-04,
         -9.77083837e-05,  -9.70639754e-04,   1.23860082e-03,
         -5.82281128e-03,  -7.96582922e-03,   1.05014764e-01,
          8.55111331e-03,   1.02730282e-02,  -1.64158875e-03,
         -9.96976532e-03,  -1.54927105e-03,  -1.33159547e-03,
          2.07886100e-03,  -9.63974337e-04,   1.92957837e-03,
         -9.57471970e-03,   8.37739408e-02,  -2.46925298e-02,
          1.15760174e-02,   1.53850103e-02,   1.39159057e-02,
          7.28045590e-04,   1.28218243e-02,   2.47708824e-03,
          3.64710722e-05,   2.31177593e-03,  -3.88215925e-03,
          2.85943900e-03,   3.40921571e-03,   8.19356064e-04,
          1.31994265e-03,  -4.02768754e-04,  -3.73146904e-04,
         -2.45199517e-05,  -1.40402978e-03,  -4.53661755e-03,
         -8.06837995e-03,  -3.07087135e-03,   5.65649476e-04,
          8.99529332e-05,   9.43572959e-04,   1.52094246e-04,
         -9.59860045e-04,   2.72397720e-03,   1.27405506e-02,
         -9.37244575e-03,  -1.79420076e-02,   1.07235732e-02,
          2.84450967e-03,   4.49513178e-03,   2.41923026e-05,
         -3.13379533e-05],
这就是
util.frame()
返回的结果:

Returns:    
    y_frames : np.ndarray [shape=(frame_length, N_FRAMES)]
    An array of frames sampled from y: y_frames[i, j] == y[j * hop_length + i]
所以你得到的是一个二维数组。因此,
raw_sounds[0]
是您加载的第一个声音文件,它可以在两个维度中寻址。您应该改为使用形状来获取其大小:

print raw_sounds[0].shape
要获得一帧,请使用此符号
result[0][:,nf]
,其中
nf
是帧的编号


当您要求
原始声音[0][0]
时,您得到的数字是帧数,它将取决于声音样本的大小。所以它似乎是正确的。

我确信我们是否误解了对方。。I seeking是每个帧的长度,而不是每个采样音频文件中的帧数。要获得每个帧的长度,可以使用
原始声音[n]。对于
n
th声音文件,使用shape[0]
。我刚刚尝试过。。它返回2048。与手动计数相比,打印功能输出的结果不正确。我添加了原始数据。。如何使其输出118。。人工计数。。(3行*39列+1个元素)=118.2048听起来正确,因为它是默认大小,请参阅文档中的默认参数,请参阅。您可以通过更改
util.frame(…)
frame\u length
参数来更改长度。请记住,帧重叠,因此采样将在连续帧中再次出现。“请记住,帧重叠,因此采样将在连续帧中再次出现。”我需要每个帧的长度为25 ms,并且应存在10 ms的framw偏移。这意味着,如果音频采样频率为16 khz,则每个帧中应有400个采样。我不确定我是否理解为什么帧像你建议的那样交错?是因为大尺寸的框架吗?我如何确保每个框架只包含我需要的信息。。我想这个问题现在已经超出了范围。