19.6 chunk -- IFFチャンクデータの読み込み

このモジュールはEA IFF 85チャンクを使用しているファイルの読み込みのため のインターフェースを提供します。 19.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の例外が発生して失敗します。

クラス Chunk( file[, align, bigendian, inclheader])
チャンクを表現するクラス。 引数fileはファイルのようなオブジェクトであることが想定されていま す。 このクラスのインスタンスは特別にそのように認められています。 必要とされるメソッドはread()だけです。 もしseek()tell()メソッドが呼び出されて例外を発生させ なかったら、これらのメソッドも動作します。 これらのメソッドが呼び出されて例外を発生させても、オブジェクトを変化させ ないようになっています。

省略可能な引数alignがtrueなら、チャンクデータが偶数個で2バイトごと に整頓されていると想定します。 もしalignがfalseなら、チャンクデータが奇数個になっていると想定しま す。 デフォルト値はtrueです。

もし省略可能な引数bigendianがfalseなら、チャンクサイズは little-endianであると想定します。 この引数の設定はWAVEオーディオファイルで必要です。デフォルト値はtrueで す。

もし省略可能な引数inclheaderがtrueなら、チャンクのヘッダから得られ るサイズはヘッダのサイズを含んでいると想定します。 デフォルト値はfalseです。

Chunkオブジェクトには以下のメソッドが定義されています:

getname( )
チャンクの名前(ID)を返します。 これはチャンクの始めの4バイトです。

getsize( )
チャンクのサイズを返します。

close( )
オブジェクトを閉じて、チャンクの終わりまで飛びます。 これは元のファイル自体は閉じません。

残りの以下のメソッドは、close()メソッドを呼び出した後に呼び出す と例外IOErrorを発生します。

isatty( )
Falseを返します。

seek( pos[, whence])
チャンクの現在位置を設定します。 引数whenceは省略可能で、デフォルト値は0(ファイルの絶対位 置)です;他に1(現在位置から相対的にシークします)と2 (ファイルの末尾から相対的にシークします)の値を取ります。 何も値は返しません。 もし元のファイルがシークに対応していなければ、前方へのシークのみが可能で す。

tell( )
チャンク内の現在位置を返します。

read( [size])
チャンクから最大でsizeバイト(sizeバイトを読み込むまで、少な くともチャンクの最後に行き着くまで)読み込みます。 もし引数sizeが負か省略されたら、チャンクの最後まで全てのデータを読 み込みます。 バイト値は文字列のオブジェクトとして返されます。 チャンクの最後に行き着いたら、空文字列を返します。

skip( )
チャンクの最後まで飛びます。 さらにチャンクのread()を呼び出すと、''が返されます。 もしチャンクの内容に興味がないなら、このメソッドを呼び出してファイルポイ ンタを次のチャンクの始めに設定します。


脚注

... のインターフェースを提供します。19.1
``EA IFF 85'' Standard for Interchange Format Files, Jerry Morrison, Electronic Arts, January 1985.
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。