aifc --- 讀寫(xiě) 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).


本模塊提供讀寫(xiě) AIFF 和 AIFF-C 文件的支持。AIFF 是音頻交換文件格式 (Audio Interchange File Format),一種用于在文件中存儲數字音頻采樣的格式。AIFF-C 是該格式的更新版本,其中包括壓縮音頻數據的功能。

音頻文件內有許多參數,用于描述音頻數據。采樣率或幀率是每秒對聲音采樣的次數。通道數表示音頻是單聲道,雙聲道還是四聲道。每個(gè)通道的每個(gè)幀包含一次采樣。采樣大小是以字節表示的每次采樣的大小。因此,一幀由 nchannels * samplesize (通道數*采樣大?。┳止澖M成,而一秒鐘的音頻包含 nchannels * samplesize * framerate (通道數*采樣大小*幀率)字節。

例如,CD 質(zhì)量的音頻采樣大小為 2 字節(16位),使用 2 個(gè)聲道(立體聲),且幀速率為 44,100 幀/秒。這表示幀大小為 4 字節 (2*2),一秒鐘占用 2*2*44100 字節(176,400 字節)。

aifc 模塊定義了以下函數:

aifc.open(file, mode=None)?

打開(kāi)一個(gè) AIFF 或 AIFF-C 文件并返回一個(gè)對象實(shí)例,該實(shí)例具有下方描述的方法。參數 file 是文件名稱(chēng)字符串或 文件對象。當打開(kāi)文件用于讀取時(shí),mode 必須為 'r''rb',當打開(kāi)文件用于寫(xiě)入時(shí),mode 必須為 'w''wb'。如果該參數省略,則使用 file.mode 的值(如果有),否則使用 'rb'。當文件用于寫(xiě)入時(shí),文件對象應該支持 seek 操作,除非提前獲知寫(xiě)入的采樣總數,并使用 writeframesraw()setnframes()。open() 函數可以在 with 語(yǔ)句中使用。當 with 塊執行完畢,將調用 close() 方法。

在 3.4 版更改: 添加了對 with 語(yǔ)句的支持。

當打開(kāi)文件用于讀取時(shí),由 open() 返回的對象具有以下幾種方法:

aifc.getnchannels()?

返回音頻的通道數(單聲道為 1,立體聲為 2)。

aifc.getsampwidth()?

返回以字節表示的單個(gè)采樣的大小。

aifc.getframerate()?

返回采樣率(每秒的音頻幀數)。

aifc.getnframes()?

返回文件中的音頻幀總數。

aifc.getcomptype()?

返回一個(gè)長(cháng)度為 4 的字節數組,描述了音頻文件中使用的壓縮類(lèi)型。對于 AIFF 文件,返回值為 b'NONE'。

aifc.getcompname()?

返回一個(gè)字節數組,可轉換為人類(lèi)可讀的描述,描述的是音頻文件中使用的壓縮類(lèi)型。對于 AIFF 文件,返回值為 b'not compressed'。

aifc.getparams()?

返回一個(gè) namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname),與 get*() 方法的輸出相同。

aifc.getmarkers()?

返回一個(gè)列表,包含音頻文件中的所有標記。標記由一個(gè) 3 元素的元組組成。第一個(gè)元素是標記 ID(整數),第二個(gè)是標記位置,從數據開(kāi)頭算起的幀數(整數),第三個(gè)是標記的名稱(chēng)(字符串)。

aifc.getmark(id)?

根據傳入的標記 id 返回元組,元組與 getmarkers() 中描述的一致。

aifc.readframes(nframes)?

從音頻文件讀取并返回后續 nframes 個(gè)幀。返回的數據是一個(gè)字符串,包含每個(gè)幀所有通道的未壓縮采樣值。

aifc.rewind()?

倒回讀取指針。下一次 readframes() 將從頭開(kāi)始。

aifc.setpos(pos)?

移動(dòng)讀取指針到指定的幀上。

aifc.tell()?

返回當前的幀號。

aifc.close()?

關(guān)閉 AIFF 文件。調用此方法后,對象將無(wú)法再使用。

打開(kāi)文件用于寫(xiě)入時(shí),open() 返回的對象具有上述所有方法,但 readframes()setpos() 除外,并額外具備了以下方法。只有調用了 set*() 方法之后,才能調用相應的 get*() 方法。在首次調用 writeframes()writeframesraw() 之前,必須填寫(xiě)除幀數以外的所有參數。

aifc.aiff()?

創(chuàng )建一個(gè) AIFF 文件,默認創(chuàng )建 AIFF-C 文件,除非文件名以 '.aiff' 為后綴,在此情況下默認創(chuàng )建 AIFF 文件。

aifc.aifc()?

創(chuàng )建一個(gè) AIFF-C 文件。 默認創(chuàng )建 AIFF-C 文件,除非文件名以 '.aiff' 為后綴,在此情況下默認創(chuàng )建 AIFF 文件。

aifc.setnchannels(nchannels)?

指明音頻文件中的通道數。

aifc.setsampwidth(width)?

指明以字節為單位的音頻采樣大小。

aifc.setframerate(rate)?

指明以每秒幀數表示的采樣頻率。

aifc.setnframes(nframes)?

指明要寫(xiě)入到音頻文件的幀數。 如果未設定此形參或者未正確設定,則文件需要支持位置查找。

aifc.setcomptype(type, name)?

指明壓縮類(lèi)型。 如果未指明,則音頻數據將不會(huì )被壓縮。 在 AIFF 文件中,壓縮是無(wú)法實(shí)現的。 name 形參應當為以字節數組表示的人類(lèi)可讀的壓縮類(lèi)型描述,type 形參應當為長(cháng)度為 4 的字節數組。 目前支持的壓縮類(lèi)型如下: b'NONE', b'ULAW', b'ALAW', b'G722'。

aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)?

一次性設置上述所有參數。 該參數是由多個(gè)形參組成的元組。 這意味著(zhù)可以使用 getparams() 調用的結果作為 setparams() 的參數。

aifc.setmark(id, pos, name)?

添加具有給定 id (大于 0),以及在給定位置上給定名稱(chēng)的標記。 此方法可在 close() 之前的任何時(shí)候被調用。

aifc.tell()

返回輸出文件中的當前寫(xiě)入位置。 適用于與 setmark() 進(jìn)行協(xié)同配合。

aifc.writeframes(data)?

將數據寫(xiě)入到輸出文件。 此方法只能在設置了音頻文件形參之后被調用。

在 3.4 版更改: 現在可接受任意 bytes-like object。

aifc.writeframesraw(data)?

類(lèi)似于 writeframes(),不同之處在于音頻文件的標頭不會(huì )被更新。

在 3.4 版更改: 現在可接受任意 bytes-like object。

aifc.close()

關(guān)閉 AIFF 文件。 文件的標頭會(huì )被更新以反映音頻數據的實(shí)際大小。 在調用此方法之后,對象將無(wú)法再被使用。