Ich versuche, Audio-Sample-Rate (von 44100 bis 22050) eines numpy.array mit 88200 Samples zu konvertieren, in denen ich bereits einen Prozess (wie Stille hinzufügen und konvertieren zu Mono) . Ich habe versucht, dieses Array mit audioop.ratecv
zu konvertieren, und es funktioniert, aber es gibt eine str anstelle einer numpy Array und als ich schrieb diese Daten mit scipy.io.wavfile.write
das Ergebnis wurde die Hälfte der Daten verloren und die Audio-Geschwindigkeit ist doppelt so schnell (statt langsamer, zumindest würde das irgendwie Sinn machen). audio.ratecv
funktioniert gut mit Str Arrays wie wave.open
zurück, aber ich weiß nicht, wie diese zu verarbeiten, also habe ich versucht, von str zu numpy mit numpy.array2string(data)
zu konvertieren dies auf Ratecv und bekomme korrekte Ergebnisse, und dann wieder zu numpy konvertieren mit numpy.fromstring(data, dtype)
und jetzt len der Daten ist 8 Proben. Ich denke, das liegt an der Kompliziertheit der Formate, aber ich weiß nicht, wie ich es kontrollieren kann. Ich habe auch nicht herausgefunden, welche Art von Format str wave.open
zurückgibt, so kann ich Format auf diesem zwingen.Audio-Daten-String-Format zu numpy Array
Hier ist dieser Teil meines Codes ist
def conv_sr(data, srold, fixSR, dType, chan = 1):
state = None
width = 2 # numpy.int16
print "data shape", data.shape, type(data[0]) # returns shape 88200, type int16
fragments = numpy.array2string(data)
print "new fragments len", len(fragments), "type", type(fragments) # return len 30 type str
fragments_new, state = audioop.ratecv(fragments, width, chan, srold, fixSR, state)
print "fragments", len(fragments_new), type(fragments_new[0]) # returns 16, type str
data_to_return = numpy.fromstring(fragments_new, dtype=dType)
return data_to_return
und ich nenne es wie diese
data1 = numpy.array(data1, dtype=dType)
data_to_copy = numpy.append(data1, data2)
data_to_copy = _to_copy.sum(axis = 1)/chan
data_to_copy = data_to_copy.flatten() # because its mono
data_to_copy = conv_sr(data_to_copy, sr, fixSR, dType) #sr = 44100, fixSR = 22050
scipy.io.wavfile.write(filename, fixSR, data_to_copy)