私はオーディオ処理研究の初心者で、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」と表示されます。2 バイトのサイズのフレームは 32bit-float として解釈できないため、32bit-float は Audacity での正規化操作の結果であると考えられます。
私の質問は、バイトサイズが 2、4、8 のフレームの場合、(NumPy では) どのデータ型に変換する必要があるかということです。
また、Audacity で使用される正規化操作を知っている専門家はいますか?
どうもありがとう!