On this page
21.6. 块—读取 IFF 块数据
该模块提供了一个接口,用于读取使用 EA IFF 85 块的文件。 [1]该格式至少用于音频交换文件格式(AIFF/AIFF-C)和实际媒体文件格式(RMFF)。 WAVE 音频文件格式密切相关,也可以使用此模块读取。
块具有以下结构:
Offset | Length | Contents |
---|---|---|
0 | 4 | Chunk ID |
4 | 4 | 大端字节 Sequences 的块大小,不包括标题 |
8 | n | 数据字节,其中* n *是前一字段中给出的大小 |
8 * n * | 0 或 1 | 如果* n *为奇数且使用块对齐,则需要填充字节 |
ID 是一个 4 字节的字符串,用于标识块的类型。
size 字段(32 位值,使用大端字节 Sequences 编码)给出了块数据的大小,不包括 8 字节的 Headers。
通常,IFF 类型的文件包含一个或多个块。此处定义的Chunk类的建议用法是在每个块的开头实例化一个实例,并从该实例读取直到其到达末尾,然后可以实例化新实例。在文件末尾,创建新实例将失败,并带有EOFError异常。
-
- class *
chunk.
Chunk
(* file * [,* align , bigendian , inclheader *])
- 代表块的类。 * file 参数应该是类似文件的对象。明确允许此类的实例。唯一需要的方法是read()。如果存在方法seek()和tell()并且没有引发异常,则也将使用它们。如果存在这些方法并引发异常,则说明它们没有更改对象。如果可选参数 align 为 true,则假定块在 2 字节边界上对齐。如果 align 为 false,则不假定对齐。默认值是 true。如果可选参数 bigendian 为 false,则将块大小假定为 little-endianSequences。 WAVE 音频文件需要此文件。默认值是 true。如果可选参数 inclheader *为 true,则块标题中给定的大小将包括标题的大小。默认值为 false。
- class *
Chunk对象支持以下方法:
getname
( )- 返回块的名称(ID)。这是块的前 4 个字节。
getsize
( )- 返回块的大小。
close
( )- 关闭并跳到块的末尾。这不会关闭基础文件。
如果在调用close()方法之后调用,其余方法将引发IOError。
isatty
( )- 返回
False
。
- 返回
seek
(* pos * [,* whence *])- 设置块的当前位置。 * whence *参数是可选的,默认为
0
(绝对文件定位);其他值为1
(相对于当前位置搜索)和2
(相对于文件末尾搜索)。没有返回值。如果基础文件不允许搜索,则仅允许前向搜索。
- 设置块的当前位置。 * whence *参数是可选的,默认为
tell
( )- 将当前位置返回到块中。
read
([* size *])- 从块读取最多* size 个字节(如果在获取 size 个字节之前读取到达块的末尾,则读取的字节数更少)。如果 size *参数为负或Ellipsis,则读取所有数据,直到块末尾为止。字节作为字符串对象返回。当立即遇到块的末尾时,将返回一个空字符串。
skip
( )- 跳到块的末尾。对该块向read()的所有其他调用将返回
''
。如果您对块的内容不感兴趣,则应调用此方法,以便文件指向下一个块的开头。
- 跳到块的末尾。对该块向read()的所有其他调用将返回
Footnotes
- [1]
- 交换格式文件的“ EA IFF 85”标准,杰里·莫里森,电子艺术,1985 年 1 月。