2016-11-05 6 views
1

Ich bin derzeit Sampling und Framing einige Audiodateien, so dass ich es als Eingabe für ein neuronales Netzwerk bereitstellen kann. Ich benutze Librosa, um das Audio abzutasten und es zu rahmen, besonders das Framing ist sehr wichtig, da es als Eingang für ein neurales Netzwerk benötigt wird, was bedeutet, dass die Länge konsistent sein muss, was ein Problem mit meinem Strom zu sein scheint . Rahmen.Warum ist jeder Rahmen nicht gleich lang?

ich derzeit Probenahme und wie diese Gestaltung:

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 

Jede Audio-Datei in eine Liste angehängt und für jeden Eintrag in der Liste ist es mit jedem Frame ein Array. So Informationen in raw_sounds wie folgt gespeichert werden:

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

ich scheinen ein Problem mit unterschiedlich großen Rahmen zu haben, von denen jede Audio-Dateien unterschiedlicher Länge, aber da ich es mit der gleichen Einstellung Rahmen sollte jeder Rahmen gleich sein, aber das ist nicht der Fall nach diesen Druck Debugs.

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]) 

die Ausgänge:

270 
2048 
121 
121 


96 
96 

Bin ich es falsch einrichten? oder mache ich hier etwas falsch?

Raw Beispiel:

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

Antwort

1

Von librosa's documentation ist es das, was die util.frame() kehrt:

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] 

Also, was Sie bekommen, ist eine zweidimensionale Matrix. So ist raw_sounds[0] die erste Sounddatei, die Sie geladen haben, und sie kann in zwei Dimensionen angesprochen werden. Sie sollten stattdessen Form verwenden um seine Größe zu erhalten:

print raw_sounds[0].shape 

Um einen Frame verwenden diese Notation result[0][:, nf], wo nf die Nummer des Rahmens ist.

Die Nummer, die Sie erhalten, wenn Sie nach raw_sounds[0][0] fragen, ist die Anzahl der Bilder, und es hängt von der Sound Samples Größe ab. So scheint es richtig zu funktionieren.

+0

Ich bin mir sicher, wenn wir uns gegenseitig missverstanden haben .. Ich suche die Länge jedes Frames, und nicht die Anzahl der Frames in jeder Audiodatei. –

+1

Um die Länge jedes Frames zu erhalten, können Sie 'raw_sounds [n] .shape [0]' für die 'n'te Sounddatei verwenden. –

+0

Ich habe gerade versucht, dass .. Es 2048 zurückgibt. Im Vergleich mit manuellem Zählen ist Druckfunktion Ausgabe eines falschen Ergebnisses. Ich habe die Rohdaten hinzugefügt .. Wie mache ich es Ausgabe 118 .. Manuell gezählt .. (3 Zeilen * 39 Spalten + 1 Element) = 118. –

Verwandte Themen