chunk --- 讀取 IFF 分塊數據?

源代碼: Lib/chunk.py

Deprecated since version 3.11, will be removed in version 3.13: The chunk module is deprecated (see PEP 594 for details).


本模塊提供了一個(gè)讀取使用 EA IFF 85 分塊的數據的接口chunks. 1 這種格式使用的場(chǎng)合有 Audio Interchange File Format (AIFF/AIFF-C) 和 Real Media File Format (RMFF) 等。 與它們密切相關(guān)的 WAVE 音頻文件也可使用此模塊來(lái)讀取。

一個(gè)分塊具有以下結構:

偏移

長(cháng)度

目錄

0

4

區塊ID

4

4

大端字節順序的塊大小,不包括頭

8

n

數據字節,其中 n 是前一字段中給出的大小

8 + n

0 或 1

如果 n 為奇數且使用塊對齊,則需要填充字節

ID是一個(gè)4字節的字符串,用于標識塊的類(lèi)型。

大小字段(32 位的值,使用大端字節序編碼)給出分塊數據的大小,不包括 8 字節的標頭。

使用由一個(gè)或更多分塊組成的 IFF 類(lèi)型文件。 此處定義的 Chunk 類(lèi)的建議使用方式是在每個(gè)分塊開(kāi)始時(shí)實(shí)例化一個(gè)實(shí)例并從實(shí)例讀取直到其末尾,在那之后可以再實(shí)例化新的實(shí)例。 到達文件末尾時(shí),創(chuàng )建新實(shí)例將會(huì )失敗并引發(fā) EOFError 異常。

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

代表一個(gè)分塊的類(lèi)。 file 參數預期為一個(gè)文件類(lèi)對象。 特別地也允許該類(lèi)的實(shí)例。 唯一必需的方法是 read()。 如果存在 seek()tell() 方法并且沒(méi)有引發(fā)異常,它們也會(huì )被使用。 如果存在這些方法并且引發(fā)了異常,則它們不應改變目標對象。 如果可選參數 align 為真值,則分塊應當以 2 字節邊界對齊。 如果 align 為假值,則不使用對齊。 此參數默認為真值。 如果可選參數 bigendian 為假值,分塊大小應當為小端序。 這對于 WAVE 音頻文件是必須的。 此參數默認為真值。 如果可選參數 inclheader 為真值,則分塊標頭中給出的大小將包括標頭的大小。 此參數默認為假值。

Chunk 對象支持下列方法:

getname()?

返回分塊的名稱(chēng)(ID)。 這是分塊的頭 4 個(gè)字節。

getsize()?

返回分塊的大小。

close()?

關(guān)閉并跳轉到分塊的末尾。 這不會(huì )關(guān)閉下層的文件。

close() 方法已被調用后其余方法將會(huì )引發(fā) OSError。 在 Python 3.3 之前,它們曾會(huì )引發(fā) IOError,現在這是 OSError 的一個(gè)別名。

isatty()?

返回 False。

seek(pos, whence=0)?

設置分塊的當前位置。 whence 參數為可選項并且默認為 0 (絕對文件定位);其他值還有 1 (相對當前位置查找) 和 2 (相對文件末尾查找)。 沒(méi)有返回值。 如果下層文件不支持查找,則只允許向前查找。

tell()?

將當前位置返回到分塊。

read(size=- 1)?

從分塊讀取至多 size 個(gè)字節(如果在獲得 size 個(gè)字節之前已到達分塊末尾則讀取的字節會(huì )少于此數量)。 如果 size 參數為負值或被省略,則讀取所有字節直到分塊末尾。 當立即遇到分塊末尾則返回空字節串對象。

skip()?

跳到分塊末尾。此后對分塊再次調用 read() 將返回 b''。 如果你對分塊的內容不感興趣,則應當調用此方法以使文件指向下一分塊的開(kāi)頭。

備注

1

"EA IFF 85" 交換格式文件標準, Jerry Morrison, Electronic Arts, 1985 年 1 月。