chunk读取IFF分块数据

源代码: Lib / chunk.py


该模块提供了一个用于读取使用EA IFF 85块的文件的接口。[1]此格式至少用于音频交换文件格式(AIFF / AIFF-C)和实际媒体文件格式(RMFF)。WAVE音频文件格式密切相关,也可以使用此模块读取.

块有以下结构:

偏移 长度 内容
0 4 块ID
4 4 大头字节的大小,不包括头部
8 n 数据字节,其中n是上述字段中给出的大小
8 + n 0或1 如果n是必需的填充字节使用奇数和块对齐

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

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

通常,IFF类型的文件由一个或多个块组成。这里定义的Chunk类的建议用法是在每个块的start开始实例化一个实例,并从实例读取直到它到达结束,之后可以实例化一个新实例。在文件的末尾,创建一个新实例将失败,并带有EOFError exception.

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

表示块的类。file论证预计会成为类似对象。特别允许此类的实例。所需的唯一方法是read()。如果存在方法seek()tell()并且不进行异常处理,则也会使用它们。如果这些方法存在并引发异常,则预期它们不会改变对象。如果可选参数align为真,则假定chunksare在2字节边界上对齐。如果align为false,则假定为noalignment。默认值是true。如果是可选参数bigendian如果为假,则假定块大小为小端顺序。这对于WAVE音频文件是必需的。默认值是true。如果theoptional参数inclheader为true,则chunk header中给出的大小包括标题的大小。默认值为false.

A Chunk object支持以下方法:

getname

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

getsize)

回收大小的大小.

close (

关闭并跳到块的末尾。这不会关闭下面的文件.

如果在调用OSError方法后调用,其余的方法会引发close()。在Python 3.3之前,他们使用了IOError,现在是OSError.

isatty)的别名

返回False.

seekpos, whence=0

设置块的当前位置。whence参数是可选的,默认为0(绝对文件定位);其他值是1(相对于当前位置寻找)和2(寻找相对于文件的结尾)。没有回报价值。如果底层文件不允许搜索,则只允许向前搜索.

tell()

将当前位置返回到块中.

readsize=-1

最多从块中读取size字节(如果读取到达块的末尾,则更少,然后获得size字节)。如果size参数为负或省略,则读取所有数据直到块的末尾。当块的末端被立即遇到时,返回一个emptybytes对象.

skip)

跳到块的末尾。对于thechunk的所有进一步调用read()将返回b""。如果你对chunk的内容不感兴趣,应该调用这个方法,使文件指向下一个chunk的起始位置.

Footnotes

[1] “EA IFF 85”交换格式文件标准,Jerry Morrison,ElectronicArts,1985年1月.