chunk ---读取iff分块数据

源代码: Lib/chunk.py


该模块提供了一个接口,用于读取使用ea iff 85块的文件。 1 此格式至少用于音频交换文件格式(aiff/aiff-c)和真实媒体文件格式(rmff)。波形音频文件格式是密切相关的,也可以使用此模块读取。

块具有以下结构:

抵消

长度

目录

0

4

块ID

4

4

以大端字节顺序表示的块大小,不包括头

8

n

数据字节,其中 n 是前面字段中给定的大小

8 + n

0或1

如果需要填充字节 n 是奇数,使用块对齐方式

ID是一个4字节的字符串,用于标识块的类型。

大小字段(使用big-endian字节顺序编码的32位值)给出块数据的大小,不包括8字节头。

通常,iff类型的文件由一个或多个块组成。建议使用 Chunk 这里定义的类是在每个块的开头实例化一个实例,并从该实例中读取,直到它到达末尾,然后可以实例化一个新实例。在文件末尾,创建新实例将失败,并返回 EOFError 例外。

class chunk.Chunk(file, align=True, bigendian=True, inclheader=False)

表示块的类。这个 file 参数应为类似文件的对象。特别允许使用此类的实例。唯一需要的方法是 read() . 如果方法 seek()tell() 存在且不会引发异常,它们也会被使用。如果存在这些方法并引发异常,则它们不会更改对象。如果可选参数 排列 为真,假定块在2字节边界上对齐。如果 排列 为假,不假定对齐。默认值为true。如果可选参数 端法 如果为false,则假定块大小以小尾数顺序排列。这对于Wave音频文件是必需的。默认值为true。如果可选参数 分包器 为真,块头中给定的大小包括头的大小。默认值为假。

A Chunk 对象支持以下方法:

getname()

返回块的名称(ID)。这是块的前4个字节。

getsize()

返回块的大小。

close()

关闭并跳到块的末尾。这不会关闭基础文件。

其余方法将提高 OSError 如果在 close() 方法已被调用。在python 3.3之前,他们曾经引发 IOError ,现在是的别名 OSError .

isatty()

返回 False .

seek(pos, whence=0)

设置块的当前位置。这个 何处 参数是可选的,默认为 0 (绝对文件定位);其他值为 1 (相对于当前位置搜索)和 2 (相对于文件结尾查找)。没有返回值。如果基础文件不允许查找,则只允许向前查找。

tell()

将当前位置返回到块中。

read(size=- 1)

至多阅读 size 块中的字节数(如果读取在获取前碰到块的末尾,则会减少 size 字节)。如果 size 参数为负或省略,读取所有数据直到块结束。当立即遇到块的结尾时,将返回空字节对象。

skip()

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

脚注

1

“EA IFF 85”交换格式文件标准,Jerry Morrison,电子艺术,1985年1月。