chunk --- 讀取 IFF 分塊數(shù)據(jù)?
源代碼: Lib/chunk.py
本模塊提供了一個(gè)讀取使用 EA IFF 85 分塊的數(shù)據(jù)的接口chunks. 1 這種格式使用的場(chǎng)合有 Audio Interchange File Format (AIFF/AIFF-C) 和 Real Media File Format (RMFF) 等。 與它們密切相關(guān)的 WAVE 音頻文件也可使用此模塊來讀取。
一個(gè)chunk具有以下結(jié)構(gòu):
偏移 |
長(zhǎng)度 |
目錄 |
|---|---|---|
0 |
4 |
區(qū)塊ID |
4 |
4 |
大端字節(jié)順序的塊大小,不包括頭 |
8 |
n |
數(shù)據(jù)字節(jié),其中 n 是前一字段中給出的大小 |
8 + n |
0 或 1 |
如果 n 為奇數(shù)且使用塊對(duì)齊,則需要填充字節(jié) |
ID是一個(gè)4字節(jié)的字符串,用于標(biāo)識(shí)塊的類型。
大小字段(32 位的值,使用大端字節(jié)序編碼)給出分塊數(shù)據(jù)的大小,不包括 8 字節(jié)的標(biāo)頭。
使用由一個(gè)或更多分塊組成的 IFF 類型文件。 此處定義的 Chunk 類的建議使用方式是在每個(gè)分塊開始時(shí)實(shí)例化一個(gè)實(shí)例并從實(shí)例讀取直到其末尾,在那之后可以再實(shí)例化新的實(shí)例。 到達(dá)文件末尾時(shí),創(chuàng)建新實(shí)例將會(huì)失敗并引發(fā) EOFError 異常。
-
class
chunk.Chunk(file, align=True, bigendian=True, inclheader=False)? 代表一個(gè)分塊的類。 file 參數(shù)預(yù)期為一個(gè)文件類對(duì)象。 特別地也允許該類的實(shí)例。 唯一必需的方法是
read()。 如果存在seek()和tell()方法并且沒有引發(fā)異常,它們也會(huì)被使用。 如果存在這些方法并且引發(fā)了異常,則它們不應(yīng)改變目標(biāo)對(duì)象。 如果可選參數(shù) align 為真值,則分塊應(yīng)當(dāng)以 2 字節(jié)邊界對(duì)齊。 如果 align 為假值,則不使用對(duì)齊。 此參數(shù)默認(rèn)為真值。 如果可選參數(shù) bigendian 為假值,分塊大小應(yīng)當(dāng)為小端序。 這對(duì)于 WAVE 音頻文件是必須的。 此參數(shù)默認(rèn)為真值。 如果可選參數(shù) inclheader 為真值,則分塊標(biāo)頭中給出的大小將包括標(biāo)頭的大小。 此參數(shù)默認(rèn)為假值。Chunk對(duì)象支持下列方法:-
getname()? 返回分塊的名稱(ID)。 這是分塊的頭 4 個(gè)字節(jié)。
-
getsize()? 返回分塊的大小。
-
close()? 關(guān)閉并跳轉(zhuǎn)到分塊的末尾。 這不會(huì)關(guān)閉下層的文件。
在
close()方法已被調(diào)用后其余方法將會(huì)引發(fā)OSError。 在 Python 3.3 之前,它們?cè)鴷?huì)引發(fā)IOError,現(xiàn)在這是OSError的一個(gè)別名。-
isatty()? 返回
False。
-
seek(pos, whence=0)? 設(shè)置分塊的當(dāng)前位置。 whence 參數(shù)為可選項(xiàng)并且默認(rèn)為
0(絕對(duì)文件定位);其他值還有1(相對(duì)當(dāng)前位置查找) 和2(相對(duì)文件末尾查找)。 沒有返回值。 如果下層文件不支持查找,則只允許向前查找。
-
tell()? 將當(dāng)前位置返回到分塊。
-
read(size=-1)? 從分塊讀取至多 size 個(gè)字節(jié)(如果在獲得 size 個(gè)字節(jié)之前已到達(dá)分塊末尾則讀取的字節(jié)會(huì)少于此數(shù)量)。 如果 size 參數(shù)為負(fù)值或被省略,則讀取所有字節(jié)直到分塊末尾。 當(dāng)立即遇到分塊末尾則返回空字節(jié)串對(duì)象。
-
備注
- 1
"EA IFF 85" 交換格式文件標(biāo)準(zhǔn), Jerry Morrison, Electronic Arts, 1985 年 1 月。
