21.6. chunk
— 读取 IFF 分块数据¶
本模块提供了一个读取使用 EA IFF 85 分块的数据的接口chunks. 1 这种格式使用的场合有 Audio Interchange File Format (AIFF/AIFF-C) 和 Real Media File Format (RMFF) 等。 与它们密切相关的 WAVE 音频文件也可使用此模块来读取。
一个chunk具有以下结构:
偏移 |
长度 |
目录 |
---|---|---|
0 |
4 |
区块ID |
4 |
4 |
大端字节顺序的块大小,不包括头 |
8 |
n |
数据字节,其中 n 是前一字段中给出的大小 |
8 + n |
0 或 1 |
如果 n 为奇数且使用块对齐,则需要填充字节 |
ID是一个4字节的字符串,用于标识块的类型。
大小字段(32 位的值,使用大端字节序编码)给出分块数据的大小,不包括 8 字节的标头。
使用由一个或更多分块组成的 IFF 类型文件。 此处定义的 Chunk
类的建议使用方式是在每个分块开始时实例化一个实例并从实例读取直到其末尾,在那之后可以再实例化新的实例。 到达文件末尾时,创建新实例将会失败并引发 EOFError
异常。
-
class
chunk.
Chunk
(file[, align, bigendian, inclheader])¶ Class which represents a chunk. The file argument is expected to be a file-like object. An instance of this class is specifically allowed. The only method that is needed is
read()
. If the methodsseek()
andtell()
are present and don’t raise an exception, they are also used. If these methods are present and raise an exception, they are expected to not have altered the object. If the optional argument align is true, chunks are assumed to be aligned on 2-byte boundaries. If align is false, no alignment is assumed. The default value is true. If the optional argument bigendian is false, the chunk size is assumed to be in little-endian order. This is needed for WAVE audio files. The default value is true. If the optional argument inclheader is true, the size given in the chunk header includes the size of the header. The default value is false.Chunk
对象支持下列方法:-
getname
()¶ 返回分块的名称(ID)。 这是分块的头 4 个字节。
-
getsize
()¶ 返回分块的大小。
-
close
()¶ 关闭并跳转到分块的末尾。 这不会关闭下层的文件。
The remaining methods will raise
IOError
if called after theclose()
method has been called.-
isatty
()¶ 返回
False
。
-
seek
(pos[, whence])¶ 设置分块的当前位置。 whence 参数为可选项并且默认为
0
(绝对文件定位);其他值还有1
(相对当前位置查找) 和2
(相对文件末尾查找)。 没有返回值。 如果下层文件不支持查找,则只允许向前查找。
-
tell
()¶ 将当前位置返回到分块。
-
read
([size])¶ Read at most size bytes from the chunk (less if the read hits the end of the chunk before obtaining size bytes). If the size argument is negative or omitted, read all data until the end of the chunk. The bytes are returned as a string object. An empty string is returned when the end of the chunk is encountered immediately.
-
备注
- 1
“EA IFF 85” 交换格式文件标准, Jerry Morrison, Electronic Arts, 1985 年 1 月。