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 參數為負值或被省略,則讀取所有字節直到分塊末尾。 當立即遇到分塊末尾則返回空字節串對象。
備注
- 1
"EA IFF 85" 交換格式文件標準, Jerry Morrison, Electronic Arts, 1985 年 1 月。