Vor kurzem habe ich eine kleine Operation an Audiodateien durchgeführt.
In Bezug auf diese Seite habe ich sie als 16-Bit-Ganzzahl `` `numpy.ndarray``` gelesen.
Soundwellenform in Python anzeigen (Wav-Datei)
import numpy as np
import wave
def read_wavefile(filename):
"""WAV-Format Datei numpy.Lesen Sie als ndarray"""
wf = wave.open(filename , 'r')
buf = wf.readframes(wf.getnframes())
#Konvertieren Sie Binärdaten in 16-Bit-Ganzzahlen
return np.frombuffer(buf, dtype='int16')
Ich wollte den absoluten Wert dieser Stimme nehmen, also werde ich das Array mit `` `numpy.absolute``` konvertieren.
arr = read_wavefile('test.wav')
arr_abs = np.absolute(arr)
Der Wert "-32768" bleibt dabei jedoch erhalten, ohne in einen positiven Wert umgewandelt zu werden. Wenn Sie das Histogramm nehmen, können Sie sehen, dass die anderen negativen Werte positiv sind, aber nur "-32768" übrig bleibt (obwohl die Werte in Ordnung sind).
import matplotlib.pyplot as plt
print(type(arr_abs))
# => <class 'numpy.ndarray'>
print(arr_abs.min())
# => -32768
plt.hist(np.absolute(arr), bins=100)
plt.show()
Dies wurde durch Lesen als 32-Bit-Ganzzahl beim ersten Lesen behoben.
def read_wavefile(filename):
"""WAV-Format Datei numpy.Lesen Sie als ndarray"""
wf = wave.open(filename , 'r')
buf = wf.readframes(wf.getnframes())
#Konvertieren Sie Binärdaten in 32-Bit-Ganzzahlen
arr = np.frombuffer(buf, dtype='int16')
return arr.astype(np.int32)
arr = read_wavefile('test.wav')
arr_abs = np.absolute(arr)
print(arr_abs.min())
# => 0
Dies liegt wahrscheinlich daran, dass 16-Bit-Ganzzahlen nur von -32768 bis 32767 darstellen können, also `numpy.absolue
Ich denke, dass der Wert, der durch Konvertieren des Codes mit `erhalten wird, nicht konvertiert werden kann und der Wert, wie er ist, ausgegeben wird.
(Ich konnte keine Dokumentation zu diesen Spezifikationen finden.)
Bei der Verwendung von Programmen zur numerischen Berechnung wie Pythons Numpy- und R-Sprache wird häufig erkannt, dass der Datentyp der C-Sprache wie für die Beschleunigung verwendet wird. Daher ist Vorsicht geboten als üblich. Hat.
Die diesmal verwendete Version von `` `numpy``` ist übrigens 1.13.0.
$ pip freeze | grep numpy
numpy==1.13.0
Recommended Posts