我是音频处理研究的新手,使用python3中的pydub模块来操作“m4a”格式的音频文件。一开始用pydub读取原始的m4a文件是可以的,但是经过几步操作(例如VAD和数据增强操作)后,我无法将生成的m4a文件中的帧读出为numpy.ndarray,并收到以下错误:
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
奇怪的是,所有 m4a 文件(无论原始输入还是最终输出)都可以在音频应用程序中成功打开并在扬声器中产生合理的声音。通过进一步调查问题,我注意到最终输出中的帧是大小为 8 的字节,而原始输入中的帧是大小为 2 的字节。
原始输入和最终输出文件用 audacity 打开时,都显示为“mono 16000Hz 32-bit float”。由于 2bytes 大小的帧无法解析为 32bit-float,我猜测 32bit-float 是 Audacity 中进行了归一化操作的结果。
我的问题是,对于字节大小为 2、4、8 的帧,应该将其转换为哪种数据类型(在 numpy 中)?
有没有大师知道在 Udacity 中采用的规范化操作?
多谢!