21.5. wave --- WAVファイルの読み書き

ソースコード: Lib/wave.py


wave モジュールは、WAVサウンドフォーマットへの便利なインターフェイスを提供するモジュールです。このモジュールは圧縮/展開をサポートしていませんが、モノラル/ステレオには対応しています。

wave モジュールは、以下の関数と例外を定義しています:

wave.open(file[, mode])

file が文字列ならその名前のファイルを開き、そうでないならシーク可能な file like オブジェクトとして扱います。 mode は以下のうちのいずれかです。

'r', 'rb'

読み込みのみのモード。

'w', 'wb'

書き込みのみのモード。

WAVファイルに対して読み込み/書き込み両方のモードで開くことはできないことに注意して下さい。

'r''rb'modeWave_read オブジェクトを返し、 'w''wb'modeWave_write オブジェクトを返します。 mode が省略されていて、ファイルのようなオブジェクトが file として渡されると、 file.modemode のデフォルト値として使われます(必要であれば、さらにフラグ 'b' が付け加えられます)。

file like オブジェクトを渡した場合、 wave オブジェクトの close() メソッドを呼び出してもその file like オブジェクトを close しません。 file like オブジェクトの close は呼び出し側の責任になります。

wave.openfp(file, mode)

open() と同義。後方互換性のために残されています。

exception wave.Error

WAVの仕様を犯したり、実装の欠陥に遭遇して何か実行不可能となった時に発生するエラー。

21.5.1. Wave_read オブジェクト

open() によって返される Wave_read オブジェクトには、以下のメソッドがあります:

Wave_read.close()

wave によって開かれていた場合はストリームを閉じ、このオブジェクトのインスタンスを使用できなくします。これはオブジェクトのガベージコレクション時に自動的に呼び出されます。

Wave_read.getnchannels()

オーディオチャンネル数(モノラルなら 1 、ステレオなら 2 )を返します。

Wave_read.getsampwidth()

サンプルサイズをバイト数で返します。

Wave_read.getframerate()

サンプリングレートを返します。

Wave_read.getnframes()

オーディオフレーム数を返します。

Wave_read.getcomptype()

圧縮形式を返します( 'NONE' だけがサポートされている形式です)。

Wave_read.getcompname()

getcomptype() を人に判読可能な形にしたものです。通常、 'NONE' に対して 'not compressed' が返されます。

Wave_read.getparams()

get*() メソッドが返すのと同じ (nchannels, sampwidth, framerate, nframes, comptype, compname) のタプルを返します。

Wave_read.readframes(n)

現在のポインタから n 個のオーディオフレームの値を読み込んで、バイトごとに文字に変換して文字列を返します。

Wave_read.rewind()

ファイルのポインタをオーディオストリームの先頭に戻します。

以下の2つのメソッドは aifc モジュールとの互換性のために定義されており、何も面白いことはしません。

Wave_read.getmarkers()

None を返します。

Wave_read.getmark(id)

エラーを発生します。

以下の2つのメソッドは共通の"位置"を定義しています。"位置"は他の関数とは独立して実装されています。

Wave_read.setpos(pos)

ファイルのポインタを指定した位置に設定します。

Wave_read.tell()

ファイルの現在のポインタ位置を返します。

21.5.2. Wave_write オブジェクト

open() によって返される Wave_write オブジェクトには、以下のメソッドがあります:

Wave_write.close()

nframes が正しいか確認して、ファイルが wave によって開かれていた場合は閉じます。このメソッドはオブジェクトがガベージコレクションされるときに呼び出されます。

Wave_write.setnchannels(n)

チャンネル数を設定します。

Wave_write.setsampwidth(n)

サンプルサイズを n バイトに設定します。

Wave_write.setframerate(n)

サンプリングレートを n に設定します。

Wave_write.setnframes(n)

フレーム数を n に設定します。あとからフレームが書き込まれるとフレーム数は変更されます。

Wave_write.setcomptype(type, name)

圧縮形式とその記述を設定します。現在のところ、非圧縮を示す圧縮形式 NONE だけがサポートされています。

Wave_write.setparams(tuple)

この tuple(nchannels, sampwidth, framerate, nframes, comptype, compname) でなければならず、その値はそれぞれの set*() メソッドで有効でなければなりません。すべてのパラメータを設定します。

Wave_write.tell()

ファイルの中の現在位置を返します。 Wave_read.tell()Wave_read.setpos() メソッドでお断りしたことがこのメソッドにも当てはまります。

Wave_write.writeframesraw(data)

nframes の修正なしにオーディオフレームを書き込みます。

Wave_write.writeframes(data)

オーディオフレームを書き込んで nframes を修正します。

writeframes()writeframesraw() メソッドを呼び出したあとで、どんなパラメータを設定しようとしても不正となることに注意して下さい。そうすると wave.Error を発生します。