wave —WAVファイルの読み取りと書き込み
ソースコード: :source: `Lib / wave.py`
wave モジュールは、WAVサウンドフォーマットへの便利なインターフェイスを提供します。 圧縮/解凍はサポートしていませんが、モノラル/ステレオはサポートしています。
wave モジュールは、次の関数と例外を定義します。
- wave.open(file, mode=None)
file が文字列の場合は、その名前でファイルを開きます。それ以外の場合は、ファイルのようなオブジェクトとして扱います。 モードは次のようになります。
'rb'
読み取り専用モード。
'wb'
書き込み専用モード。
WAVファイルの読み取り/書き込みは許可されないことに注意してください。
'rb'
の mode はWave_read
オブジェクトを返し、'wb'
の mode はWave_write
オブジェクトを返します。 。 mode を省略し、ファイルのようなオブジェクトを file として渡す場合、file.mode
が mode のデフォルト値として使用されます。ファイルのようなオブジェクトを渡すと、waveオブジェクトは
close()
メソッドが呼び出されたときにオブジェクトを閉じません。 ファイルオブジェクトを閉じるのは呼び出し元の責任です。open()関数は、 with ステートメントで使用できます。
with
ブロックが完了すると、 Wave_read.close()または Wave_write.close()メソッドが呼び出されます。バージョン3.4で変更:シークできないファイルのサポートが追加されました。
- exception wave.Error
- WAV仕様に違反している、または実装の欠陥にぶつかったために何かが不可能な場合に発生するエラー。
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()の人間が読めるバージョン。 通常、
'not compressed'
は'NONE'
と同等です。
- Wave_read.getparams()
- namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
を返します。これは、get*()
メソッドの出力に相当します。
- 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()
- 現在のファイルポインタの位置を返します。
Wave_writeオブジェクト
シーク可能な出力ストリームの場合、wave
ヘッダーは、実際に書き込まれたフレーム数を反映するように自動的に更新されます。 シークできないストリームの場合、 nframes の値は、最初のフレームデータが書き込まれるときに正確である必要があります。 正確な nframes 値は、 setnframes()または setparams()を呼び出し、 close( )が呼び出され、 writeframesraw()を使用してフレームデータを書き込むか、 writeframes()を呼び出してすべてのフレームデータを書き込みます。 後者の場合、 writeframes()はデータ内のフレーム数を計算し、それに応じて nframes を設定してからフレームデータを書き込みます。
open()によって返されるWave_writeオブジェクトには、次のメソッドがあります。
バージョン3.4で変更:シークできないファイルのサポートが追加されました。
- Wave_write.close()
- nframes が正しいことを確認し、 wave によって開かれた場合はファイルを閉じます。 このメソッドは、オブジェクトの収集時に呼び出されます。 出力ストリームがシーク可能でなく、 nframes が実際に書き込まれたフレーム数と一致しない場合、例外が発生します。
- Wave_write.setnchannels(n)
- チャンネル数を設定します。
- Wave_write.setsampwidth(n)
- サンプル幅を n バイトに設定します。
- Wave_write.setframerate(n)
フレームレートを n に設定します。
バージョン3.2で変更:このメソッドへの非整数入力は、最も近い整数に丸められます。
- Wave_write.setnframes(n)
- フレーム数を n に設定します。 実際に書き込まれるフレーム数が異なる場合、これは後で変更されます(この更新の試行では、出力ストリームがシーク可能でない場合にエラーが発生します)。
- Wave_write.setcomptype(type, name)
- 圧縮の種類と説明を設定します。 現時点では、圧縮タイプ
NONE
のみがサポートされており、圧縮はサポートされていません。
- Wave_write.setparams(tuple)
- タプルは
(nchannels, sampwidth, framerate, nframes, comptype, compname)
であり、値はset*()
メソッドに有効である必要があります。 すべてのパラメータを設定します。
- Wave_write.tell()
- Wave_read.tell()メソッドと Wave_read.setpos()メソッドについても同じ免責事項を使用して、ファイル内の現在の位置を返します。
- Wave_write.writeframesraw(data)
nframes を修正せずにオーディオフレームを書き込みます。
バージョン3.4で変更:任意のバイトのようなオブジェクトが受け入れられるようになりました。
- Wave_write.writeframes(data)
オーディオフレームを書き込み、 nframes が正しいことを確認します。 出力ストリームがシーク可能でなく、 data が書き込まれた後に書き込まれたフレームの総数が、 nframes に以前に設定された値と一致しない場合、エラーが発生します。
バージョン3.4で変更:任意のバイトのようなオブジェクトが受け入れられるようになりました。
writeframes()
またはwriteframesraw()
を呼び出した後にパラメータを設定することは無効であり、そうしようとすると wave.Error が発生することに注意してください。