2016-11-05 5 views
1

현재 오디오 파일을 샘플링하고 프레이밍하여 신경망의 입력으로 제공 할 수 있습니다. 나는 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 

내가 잘못을 설정하는 건가요? 아니면 내가 여기서 뭔가 잘못하고있는거야?

원시 샘플 :

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] 

그래서 당신이 무엇을 얻을 두 차원 배열 : librosa's documentation에서

[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], 

답변

1

이 무엇 util.frame() 반환합니다. 따라서 raw_sounds[0]은로드 한 첫 번째 사운드 파일이며 2 차원에서 처리 할 수 ​​있습니다. 하나 명의 프레임을 사용 nf 프레임의 수를이 표기법 result[0][:, nf]를 얻으려면

print raw_sounds[0].shape 

: 대신 크기를 얻을 모양을 사용해야합니다.

raw_sounds[0][0]을 요구할 때 얻게되는 숫자는 프레임 수이며 사운드 샘플 크기에 따라 달라집니다. 그래서 제대로 작동하는 것 같습니다.

+0

만약 우리가 서로 오해했다면 ... 나는 샘플링 된 각 오디오 파일의 프레임 수가 아닌 각 프레임의 길이를 찾고 있습니다. –

+1

각 프레임의 길이를 얻으려면'n 번째 소리 파일에 raw_sounds [n] .shape [0]'을 사용할 수 있습니다. –

+0

방금 ​​시도한 .. 2048을 반환합니다. 수동 계산과 비교하면 잘못된 결과가 출력되는 인쇄 기능입니다. 원시 데이터를 추가했습니다. 어떻게 출력을 만들까요? 수작업으로 계산됩니다. (3 행 * 39 열 +1 요소) = 118. –