【Python】waveで.wavファイルを読み込もうとするとエラーが出る
waveを使うと、たいていの.wavファイルは読み込むことができます。
WAVファイル読み込みのプログラムはこちらです。
wr = wave.open(FileName, "r")
しかし、極稀に
Error: file does not start with RIFF id
というエラーが出て、ファイルが読み込めないことがあります。
エラー内容を直訳すると、
エラー:.wavファイルがRIFF idから始まっていません。
となります。
この原因は、プログラムではなく、WAVファイル側にあります。
WAVファイルには大きく分けて2つのバージョンがあり、64-bit RIFFと32-bit RIFFがあります。
そして、waveライブラリは、64bit-RIFFに対応していないのです!
上記エラーの原因は、64bit-RIFFのWAVファイルを読み込もうとしたために起こったのです。
因みに、64bit-RIFFのWAVファイルは拡張子が.w64となっている場合もあります。
解決は以下の二つ。
・WAVのフォーマットを変更する
・64bit-RIFFのWAVファイル対応のPythonライブラリを使用する。
1.WAVファイルをフォーマットし直す
今回は、AviUtlを使った方法を紹介します。
REAPERやAudacityなどの音声編集ソフトも試したのですが、64bit-RIFFのWAVは読み込めないようです。
...さすがAviUtl!!
新規プロジェクトを作成し、「音声ファイル」をぶち込みます。
音声ファイルを読み込むときは、エクスプローラからドラッグするのではなく、「メディアオブジェクトの追加」→「音声ファイルの追加」→「ファイル参照」で行ってください(下写真)
そして、音声ファイルを読み込んだ後は、「ファイル」→「WAV出力」でWAVファイルを出力してください。
「オーディオ圧縮」は「PCM 44.1kHz」を選択してください。
これで、32bit-RIFFを作成することができます。
作成したファイルをPythonで読み込んでみてください。うまくいくはずです。
雑な説明ですみません。
AviUtlの扱いに慣れてない方は、次の2つ目の解決策をお勧めします。
1-2.wavのフォーマットを変更する(専用アプリを使う)
もう一つ、解決策を見つけました。
それは、FFmpegを使用する方法です。
FFmpeg
FFmpegとは、動画と音声を記録・変換・再生するためのフリーソフトウェアで広く使われています。
インストールの方法は、
Download FFmpegからインストールするか、
apt-get install ffmpeg
の2種類だと思います。
インストールが完了したら、
ffmpeg -i (変換したいWAVファイル) out_test7.wav
で32bitWAVに変換、という感じです。
参考:
https://blog.csdn.net/appleyuchi/article/details/78486179