我是音訊處理研究的新手,使用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 位元組。
當原始輸入和最終輸出檔案都大膽開啟時,都顯示為「mono 16000Hz 32-bit float」。由於2bytes大小的幀無法解釋為32bit-float,我猜測32bit-float是Audacity中標準化操作的結果。
我的問題是對於位元組大小為 2、4、8 的幀,應該將其轉換為什麼資料類型(在 numpy 中)?
有沒有大師知道大膽中使用的標準化操作?
多謝!