このモジュールはEA IFF 85チャンクを使用しているファイルの読み込みのためのインターフェースを提供します。 [1] このフォーマットは少なくとも、Audio Interchange File Format (AIFF/AIFF-C) とReal Media File Format (RMFF)で使われています。 WAVEオーディオファイルフォーマットも厳密に対応しているので、このモジュールで読み込みできます。チャンクは以下の構造を持っています:
Offset値 | 長さ | 内容 |
---|---|---|
0 | 4 | チャンクID |
4 | 4 | big- endianで示したチャンクのサイズで、ヘッダは含みません |
8 | n | バイトデータで、*n*はこれより先のフィールドのサイズ |
8 + n | 0 or 1 | n が奇数ならチャンクの整頓のために埋められるバイト |
IDはチャンクの種類を識別する4バイトの文字列です。
サイズフィールド(big-endianでエンコードされた32ビット値)は、8バイトのヘッダを含まないチャンクデータのサイズを示します。
普通、IFFタイプのファイルは1個かそれ以上のチャンクからなります。このモジュールで定義される Chunk クラスの使い方として提案しているのは、それぞれのチャンクの始めにインスタンスを作り、終わりに達するまでそのインスタンスから読み取り、その後で新しいインスタンスを作るということです。ファイルの終わりで新しいインスタンスを作ろうとすると、 EOFError の例外が発生して失敗します。
チャンクを表現するクラス。引数 file はファイルのようなオブジェクトであることが想定されています。このクラスのインスタンスは一つだけ特別に許可されています。必要とされるメソッドは read() だけです。もし seek() と tell() メソッドが呼び出されて例外を発生させなかったら、これらのメソッドも動作します。これらのメソッドが呼び出されて例外を発生させても、オブジェクトを変化させないようになっています。
省略可能な引数 align がtrueなら、チャンクデータが偶数個で2バイトごとに整頓されていると想定します。もし align がfalseなら、チャンクデータが奇数個になっていると想定します。デフォルト値はtrueです。
もし省略可能な引数 bigendian がfalseなら、チャンクサイズは little-endianであると想定します。この引数の設定はWAVEオーディオファイルで必要です。デフォルト値はtrueです。
もし省略可能な引数 inclheader がtrueなら、チャンクのヘッダから得られるサイズはヘッダのサイズを含んでいると想定します。デフォルト値はfalseです。
Chunk オブジェクトには以下のメソッドが定義されています:
チャンクの名前(ID)を返します。これはチャンクの始めの4バイトです。
チャンクのサイズを返します。
オブジェクトを閉じて、チャンクの終わりまで飛びます。これは元のファイル自体は閉じません。
残りの以下のメソッドは、 close() メソッドを呼び出した後に呼び出すと例外 IOError を発生します。
False を返します。
チャンクの現在位置を設定します。引数 whence は省略可能で、デフォルト値は 0 (ファイルの絶対位置)です;他に 1 (現在位置から相対的にシークします)と 2 (ファイルの末尾から相対的にシークします)の値を取ります。何も値は返しません。もし元のファイルがシークに対応していなければ、前方へのシークのみが可能です。
チャンク内の現在位置を返します。
チャンクから最大で size バイト( size バイトを読み込むまで、少なくともチャンクの最後に行き着くまで)読み込みます。もし引数 size が負か省略されたら、チャンクの最後まで全てのデータを読み込みます。バイト値は文字列のオブジェクトとして返されます。チャンクの最後に行き着いたら、空文字列を返します。
Footnotes
[1] | “EA IFF 85” Standard for Interchange Format Files, Jerry Morrison, Electronic Arts, January 1985. |