Ich bin ein Neuling in der Audioverarbeitungsforschung und verwende das Pydub-Modul in Python3, um Audiodateien im „m4a“-Format zu bearbeiten. Am Anfang kann ich die ursprünglichen M4A-Dateien problemlos mit Pydub lesen, aber nach einigen Schritten (wie VAD und Datenerweiterungsoperationen) kann ich die Frames in den erstellten M4A-Dateien nicht als Numpy.ndarray auslesen und erhalte die folgenden Fehler:
np.array(frames["music_no_silence"].get_array_of_samples())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/miniconda/envs/py36/lib/python3.6/site-packages/pydub/audio_segment.py", line 272, in get_array_of_samples
array_type_override = self.array_type
File "/home/user/miniconda/envs/py36/lib/python3.6/site-packages/pydub/audio_segment.py", line 277, in array_type
return get_array_type(self.sample_width * 8)
File "/home/user/miniconda/envs/py36/lib/python3.6/site-packages/pydub/utils.py", line 43, in get_array_type
t = ARRAY_TYPES[bit_depth]
KeyError: 64
Es ist seltsam, dass alle M4A-Dateien, egal ob Originaleingaben oder Endausgaben, erfolgreich in Audioanwendungen geöffnet werden können und vernünftige Klänge in den Lautsprechern erzeugen. Bei weiterer Untersuchung des Problems stelle ich fest, dass die Frames in den Endausgaben 8 Byte groß sind, während die Frames in den Originaleingaben 2 Byte groß sind.
Wenn sowohl die ursprüngliche Eingabe- als auch die endgültige Ausgabedatei mit Audacity geöffnet werden, werden beide als „Mono 16000 Hz 32-Bit-Float“ angezeigt. Da Frames in der Größe von 2 Bytes nicht als 32-Bit-Float interpretiert werden können, vermute ich, dass 32-Bit-Float das Ergebnis der Normalisierungsoperation in Audacity ist.
Meine Frage betrifft Frames mit einer Bytegröße von 2, 4 oder 8. In welchen Datentyp (in NumPy) sollen sie konvertiert werden?
Und kennt irgendein Guru die in Audacity verwendete Normalisierungsoperation?
Vielen Dank!