概要
wavファイルを扱うライブラリwavioを使って、24ビットwavファイルが読み込めることを確認した。
背景と目的
いわゆるハイレゾ音源として量子化ビット数が24ビットのwavファイルをPythonで開こうとしたところ、waveモジュールではうまく扱えなかった。そこで、24ビットのwavファイルが読み込めるモジュールを探して試す。
詳細
1.モジュールを調べる
- Web上でいろいろ探してみたところ、こちらでお勧めされているwavioというモジュールがよさそうだった。なので、これを試す。
2.wavioのインストール
- インストールは、いろいろ手段はあるが、こちらからダウンロードした。他のPCで、pip install wavioでもインストールできたので、それでもよいだろう。
3.wavファイルを開いてみる
- 以下のコードを作成し、192kHz/24bit音源を読み込んでみたところ、ちゃんと読み込めた。
- wav.dataは、24bit音源の場合、int32のarrayになる。24bit整数型などというものがないので当たり前だが。16bit音源なら、int16。
- それと、チャンネル数を参照するメソッドがないのがちょっと気になるが、まあdataの列数を数えれば大丈夫。
# coding: utf-8 import wavio # 読み込み wav = wavio.read("filename.wav") # 参照 print wav.rate # サンプリング周波数[Hz] print wav.sampwidth # サンプル幅[Byte] print wav.sampwidth * 8 # 量子化ビット数[bit] print wav.data # 波形データ print len(wav.data[0, :]) # チャンネル数
4.wavファイルを作成してみる
読み出したものをそのまま、別名で書きだしてみた。必須の引数は3つなのだが、24bit音源の場合、4つ目をちゃんと指定しないと、正しいファイルとして吐き出されないようだった。なので、指定するのが無難。
wavio.write("filename.wav", wav.data, wav.rate, sampwidth=3)
というわけで、ハイレゾwav音源の読み書きができた。