为什么每个帧的长度不相等?
Why are each frame not equally length?
我目前正在对一些音频文件进行采样和取景,这样我就可以将其作为神经网络的输入提供。我正在使用 Librosa 对音频进行采样并对其进行构图,尤其是构图非常重要,因为这是作为神经网络需要的输入提供的,这意味着长度必须一致,这似乎是我目前的问题。帧。
我目前正在这样采样和取景:
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
每个音频文件都附加到一个列表中,对于列表中的每个条目,每个帧都有一个数组。所以 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],
来自librosa's documentation这是util.frame()
returns:
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
是帧的编号。
当您要求 raw_sounds[0][0]
时得到的数字是帧数,这将取决于声音样本的大小。所以它似乎工作正常。
我目前正在对一些音频文件进行采样和取景,这样我就可以将其作为神经网络的输入提供。我正在使用 Librosa 对音频进行采样并对其进行构图,尤其是构图非常重要,因为这是作为神经网络需要的输入提供的,这意味着长度必须一致,这似乎是我目前的问题。帧。
我目前正在这样采样和取景:
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
每个音频文件都附加到一个列表中,对于列表中的每个条目,每个帧都有一个数组。所以 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],
来自librosa's documentation这是util.frame()
returns:
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
是帧的编号。
当您要求 raw_sounds[0][0]
时得到的数字是帧数,这将取决于声音样本的大小。所以它似乎工作正常。