22.5. chunk
- 读取IFF分块数据¶
源代码: Lib / chunk.py
此模块提供用于读取使用EA IFF 85块的文件的接口。[1]此格式至少用于音频交换文件格式(AIFF / AIFF-C)和真实媒体文件格式(RMFF)。WAVE音频文件格式是密切相关的,也可以使用此模块读取。
块具有以下结构:
抵消 | 长度 | 内容 |
---|---|---|
0 | 4 | 块ID |
4 | 4 | 块大小按big-endian字节顺序,不包括头 |
8 | n | 数据字节,其中n是前面字段中给出的大小 |
8 + n | 0或1 | 如果n为奇数且使用块对齐,则需要填充字节 |
ID是一个4字节的字符串,用于标识块的类型。
大小字段(32位值,使用大端字节顺序编码)给出了块数据的大小,不包括8字节头。
通常,IFF类型的文件由一个或多个块组成。这里定义的Chunk
类的建议用法是在每个块的开始处实例化一个实例,并从实例读取直到它到达结束,之后可以实例化一个新的实例。在文件结束时,创建新的实例将失败并出现EOFError
异常。
- class
chunk.
Chunk
(file, align=True, bigendian=True, inclheader=False)¶ 表示块的类。文件参数应为类文件对象。这个类的实例是特别允许的。唯一需要的方法是
read()
。如果方法seek()
和tell()
存在,并且不引发异常,它们也被使用。如果这些方法存在并引发异常,它们将不会改变对象。如果可选参数align为真,则假定块在2字节边界对齐。如果align为false,则不进行对齐。默认值为true。如果可选参数bigendian为假,则块大小假定为小端顺序。这是WAVE音频文件所需要的。默认值为true。如果可选参数inclheader为真,则块头中给出的大小包括头的大小。默认值为false。Chunk
对象支持以下方法:-
getname
()¶ 返回块的名称(ID)。这是块的前4个字节。
-
getsize
()¶ 返回块的大小。
-
close
()¶ 关闭并跳到块的结尾。这不会关闭底层文件。
如果在
close()
方法被调用后调用,剩余的方法将引发OSError
。在Python 3.3之前,他们习惯于引发IOError
,现在是OSError
的别名。-
isatty
()¶ 返回
False
。
-
seek
(pos, whence=0)¶ 设置块的当前位置。whence参数是可选的,默认为
0
(绝对文件定位);其他值为1
(相对于当前位置寻找)和2
(相对于文件末尾寻找)。没有返回值。如果底层文件不允许seek,只允许前向寻道。
-
tell
()¶ 将当前位置返回到块中。
-
read
(size=-1)¶ 从块中读取最多size个字节(如果读取在获取大小字节之前命中块的末尾,则减少)。如果size参数为负或省略,读取所有数据,直到块的结束。当立即遇到块的结尾时,返回一个空字节对象。
-
脚注
[1] | “EA IFF 85”交换格式文件标准,Jerry Morrison,Electronic Arts,1985年1月。 |