chunk
— 读取 IFF 分块数据¶
源代码: Lib/chunk.py
此模块提供了一个接口,用于读取使用 EA IFF 85 块的文件。 [1] 此格式至少用于音频交换文件格式 (AIFF/AIFF-C) 和 Real Media 文件格式 (RMFF)。WAVE 音频文件格式与之密切相关,也可以使用此模块进行读取。
块具有以下结构
偏移 |
长度 |
内容 |
---|---|---|
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=True, bigendian=True, inclheader=False)¶
表示块的类。file 参数应为类似文件的对象。特别允许此类的实例。唯一需要的方法是
read()
。如果方法seek()
和tell()
存在且不会引发异常,它们也会被使用。如果这些方法存在且引发异常,则认为它们不会更改对象。如果可选参数 align 为 true,则认为块在 2 字节边界上对齐。如果 align 为 false,则不认为有对齐。默认值为 true。如果可选参数 bigendian 为 false,则认为块大小为小端序。这是 WAVE 音频文件所必需的。默认值为 true。如果可选参数 inclheader 为 true,则块头中给出的大小包括头的大小。默认值为 false。一个
Chunk
对象支持以下方法- getname()¶
返回块的名称 (ID)。这是块的前 4 个字节。
- getsize()¶
返回块的大小。
- close()¶
关闭并跳到块的末尾。这不会关闭底层文件。
如果在调用
close()
方法后调用剩余方法,则这些方法将引发OSError
。在 Python 3.3 之前,它们会引发IOError
,现在是OSError
的别名。- isatty()¶
返回
False
。
- seek(pos, whence=0)¶
设置块的当前位置。whence 参数是可选的,默认为
0
(绝对文件定位);其他值是1
(相对于当前位置进行查找)和2
(相对于文件的末尾进行查找)。没有返回值。如果底层文件不允许查找,则只允许向前查找。
- tell()¶
返回块中的当前位置。
- read(size=-1)¶
从块中读取最多 size 字节(如果在获取 size 字节之前读取操作到达块的末尾,则读取更少)。如果 size 参数为负数或省略,则读取所有数据,直到块的末尾。如果立即遇到块的末尾,则返回一个空字节对象。
脚注