概要

 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音源の読み書きができた。