aifc
--- 讀寫 AIFF 和 AIFC 文件?
源代碼: Lib/aifc.py
Deprecated since version 3.11, will be removed in version 3.13: The aifc
module is deprecated
(see PEP 594 for details).
本模塊提供讀寫 AIFF 和 AIFF-C 文件的支持。AIFF 是音頻交換文件格式 (Audio Interchange File Format),一種用于在文件中存儲數字音頻采樣的格式。AIFF-C 是該格式的更新版本,其中包括壓縮音頻數據的功能。
音頻文件內有許多參數,用于描述音頻數據。采樣率或幀率是每秒對聲音采樣的次數。通道數表示音頻是單聲道,雙聲道還是四聲道。每個通道的每個幀包含一次采樣。采樣大小是以字節(jié)表示的每次采樣的大小。因此,一幀由 nchannels * samplesize
(通道數*采樣大?。┳止?jié)組成,而一秒鐘的音頻包含 nchannels * samplesize * framerate
(通道數*采樣大小*幀率)字節(jié)。
例如,CD 質量的音頻采樣大小為 2 字節(jié)(16位),使用 2 個聲道(立體聲),且?guī)俾蕿?44,100 幀/秒。這表示幀大小為 4 字節(jié) (2*2),一秒鐘占用 2*2*44100 字節(jié)(176,400 字節(jié))。
aifc
模塊定義了以下函數:
- aifc.open(file, mode=None)?
打開一個 AIFF 或 AIFF-C 文件并返回一個對象實例,該實例具有下方描述的方法。參數 file 是文件名稱字符串或 文件對象。當打開文件用于讀取時,mode 必須為
'r'
或'rb'
,當打開文件用于寫入時,mode 必須為'w'
或'wb'
。如果該參數省略,則使用file.mode
的值(如果有),否則使用'rb'
。當文件用于寫入時,文件對象應該支持 seek 操作,除非提前獲知寫入的采樣總數,并使用writeframesraw()
和setnframes()
。open()
函數可以在with
語句中使用。當with
塊執(zhí)行完畢,將調用close()
方法。在 3.4 版更改: 添加了對
with
語句的支持。
當打開文件用于讀取時,由 open()
返回的對象具有以下幾種方法:
- aifc.getnchannels()?
返回音頻的通道數(單聲道為 1,立體聲為 2)。
- aifc.getsampwidth()?
返回以字節(jié)表示的單個采樣的大小。
- aifc.getframerate()?
返回采樣率(每秒的音頻幀數)。
- aifc.getnframes()?
返回文件中的音頻幀總數。
- aifc.getcomptype()?
返回一個長度為 4 的字節(jié)數組,描述了音頻文件中使用的壓縮類型。對于 AIFF 文件,返回值為
b'NONE'
。
- aifc.getcompname()?
返回一個字節(jié)數組,可轉換為人類可讀的描述,描述的是音頻文件中使用的壓縮類型。對于 AIFF 文件,返回值為
b'not compressed'
。
- aifc.getparams()?
返回一個
namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,與get*()
方法的輸出相同。
- aifc.getmarkers()?
返回一個列表,包含音頻文件中的所有標記。標記由一個 3 元素的元組組成。第一個元素是標記 ID(整數),第二個是標記位置,從數據開頭算起的幀數(整數),第三個是標記的名稱(字符串)。
- aifc.getmark(id)?
根據傳入的標記 id 返回元組,元組與
getmarkers()
中描述的一致。
- aifc.readframes(nframes)?
從音頻文件讀取并返回后續(xù) nframes 個幀。返回的數據是一個字符串,包含每個幀所有通道的未壓縮采樣值。
- aifc.rewind()?
倒回讀取指針。下一次
readframes()
將從頭開始。
- aifc.setpos(pos)?
移動讀取指針到指定的幀上。
- aifc.tell()?
返回當前的幀號。
- aifc.close()?
關閉 AIFF 文件。調用此方法后,對象將無法再使用。
打開文件用于寫入時,open()
返回的對象具有上述所有方法,但 readframes()
和 setpos()
除外,并額外具備了以下方法。只有調用了 set*()
方法之后,才能調用相應的 get*()
方法。在首次調用 writeframes()
或 writeframesraw()
之前,必須填寫除幀數以外的所有參數。
- aifc.aiff()?
創(chuàng)建一個 AIFF 文件,默認創(chuàng)建 AIFF-C 文件,除非文件名以
'.aiff'
為后綴,在此情況下默認創(chuàng)建 AIFF 文件。
- aifc.aifc()?
創(chuàng)建一個 AIFF-C 文件。 默認創(chuàng)建 AIFF-C 文件,除非文件名以
'.aiff'
為后綴,在此情況下默認創(chuàng)建 AIFF 文件。
- aifc.setnchannels(nchannels)?
指明音頻文件中的通道數。
- aifc.setsampwidth(width)?
指明以字節(jié)為單位的音頻采樣大小。
- aifc.setframerate(rate)?
指明以每秒幀數表示的采樣頻率。
- aifc.setnframes(nframes)?
指明要寫入到音頻文件的幀數。 如果未設定此形參或者未正確設定,則文件需要支持位置查找。
- aifc.setcomptype(type, name)?
指明壓縮類型。 如果未指明,則音頻數據將不會被壓縮。 在 AIFF 文件中,壓縮是無法實現(xiàn)的。 name 形參應當為以字節(jié)數組表示的人類可讀的壓縮類型描述,type 形參應當為長度為 4 的字節(jié)數組。 目前支持的壓縮類型如下:
b'NONE'
,b'ULAW'
,b'ALAW'
,b'G722'
。
- aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)?
一次性設置上述所有參數。 該參數是由多個形參組成的元組。 這意味著可以使用
getparams()
調用的結果作為setparams()
的參數。
- aifc.tell()
返回輸出文件中的當前寫入位置。 適用于與
setmark()
進行協(xié)同配合。
- aifc.writeframes(data)?
將數據寫入到輸出文件。 此方法只能在設置了音頻文件形參之后被調用。
在 3.4 版更改: 現(xiàn)在可接受任意 bytes-like object。
- aifc.writeframesraw(data)?
類似于
writeframes()
,不同之處在于音頻文件的標頭不會被更新。在 3.4 版更改: 現(xiàn)在可接受任意 bytes-like object。
- aifc.close()
關閉 AIFF 文件。 文件的標頭會被更新以反映音頻數據的實際大小。 在調用此方法之后,對象將無法再被使用。