chunk — 读取 IFF 分块数据

源代码: Lib/chunk.py

自 3.11 版本起已弃用,将在 3.13 版本中移除: chunk 模块已弃用(有关详细信息,请参阅 PEP 594)。


此模块提供了一个接口,用于读取使用 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 参数为负数或省略,则读取所有数据,直到块的末尾。如果立即遇到块的末尾,则返回一个空字节对象。

skip()

跳到块的末尾。对块的所有进一步调用 read() 将返回 b''。如果您对块的内容不感兴趣,则应调用此方法,以便文件指向下一个块的开头。

脚注