– 阅读IFF分块数据 – 多媒体服务(Python教程)(参考资料)
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
.
seek
(pos, whence=0)-
设置块的当前位置。whence参数是可选的,默认为
0
(绝对文件定位);其他值是1
(相对于当前位置寻找)和2
(寻找相对于文件的结尾)。没有回报价值。如果底层文件不允许搜索,则只允许向前搜索.
tell
()-
将当前位置返回到块中.
read
(size=-1)-
最多从块中读取size字节(如果读取到达块的末尾,则更少,然后获得size字节)。如果size参数为负或省略,则读取所有数据直到块的末尾。当块的末端被立即遇到时,返回一个emptybytes对象.
skip
()-
跳到块的末尾。对于thechunk的所有进一步调用
read()
将返回b""
。如果你对chunk的内容不感兴趣,应该调用这个方法,使文件指向下一个chunk的起始位置.
Footnotes
[1] | “EA IFF 85”交换格式文件标准,Jerry Morrison,ElectronicArts,1985年1月. |