chunk
chunk — Read IFF chunked data
该模块提供读取使用EA IFF 85块的文件的界面。[1]该格式至少用于音频交换文件格式(AIFF / AIFF-C)和真实媒体文件格式(RMFF)。WAVE音频文件格式密切相关,也可以使用此模块进行读取。
块具有以下结构:
抵消 | 长度 | 内容 |
---|---|---|
0 | 4 | 块ID |
4 | 4 | 以大端字节顺序的块大小,不包括头 |
8 | ñ | 数据字节,其中n是前面字段中给出的大小 |
8 + n | 0或1 | 如果n是奇数并且使用块对齐,则需要填充字节 |
ID是一个4字节的字符串,用于标识块的类型。
大小字段(一个32位值,使用big-endian字节顺序编码)给出了块数据的大小,不包括8字节的头。
通常一个IFF类型的文件由一个或多个块组成。Chunk
这里定义的类的建议用法是在每个块的开始处实例化一个实例,并从实例中读取,直到它到达结尾,之后可以实例化一个新实例。在文件结尾处,创建新实例将失败并出现EOFError
异常。
class chunk.Chunk(file[, align, bigendian, inclheader])
表示块的类。该文件
的说法,预计是一个类似文件
的对象。这个类的一个实例是特别允许的。唯一需要的方法是read()
。如果方法seek()
和tell()
存在并没有引发异常,它们也可使用。如果这些方法存在并引发异常,则预计它们不会改变对象。如果可选参数align
为true,则假定块在2字节边界上对齐
。如果对齐
错误,则不假定对齐
。默认值是true。如果可选参数bigendian
是假的,块大小被假定为小端顺序。这是WAVE音频文件
所必需的。默认值是true。如果可选参数inclheader
为true,则块头
中给出的大小包括头的大小。默认值是false。
一个Chunk
对象支持以下方法:
getname()
返回块的名称(ID)。这是块的前4个字节。
getsize()
返回块的大小。
close()
关闭并跳到块的末尾。这不会关闭底层文件。
IOError
如果在调用该close()
方法后调用其余方法,则会引发该方法。
isatty()
返回False
。
seek(pos[, whence])
设置块的当前位置。的何处
参数是可选的,缺省值为0
(绝对文件定位); 其他值是1
(相对于当前位置2
查找)和(相对于文件末尾查找)。没有返回值。如果底层文件不允许搜索,则只允许前向搜索。
tell()
将当前位置返回到块中。
read([size])
从块中读取大部分大小的
字节(如果在获取大小
字节之前读取到块的末尾,则读取更少)。如果size
参数为负值或省略,请读取所有数据直到块结束。字节以字符串对象的形式返回。立即遇到块结束时返回空字符串。
skip()
跳到块的末尾。所有进一步的调用read()
块将返回''
。如果您对块的内容不感兴趣,应该调用此方法,以便文件指向下一个块的开始。
注
1 | “EA IFF 85” Standard for Interchange Format Files, Jerry Morrison, Electronic Arts, January 1985. |
---|