sunau --- 讀寫 Sun AU 文件?

源代碼: Lib/sunau.py


sunau 模擬提供了一個處理 Sun AU 聲音格式的便利接口。請注意此模塊與 aifcwave 是兼容接口的。

音頻文件由標頭和數據組成。標頭的字段為:

目錄

magic word

四個字節 .snd

header size

標頭的大小,包括信息,以字節為單位。

data size

數據的物理大小,以字節為單位。

編碼

指示音頻樣本的編碼方式。

sample rate

采樣率

# of channels

的通道數。

info

提供音頻文件描述的ASCII字符串(用空字節填充)。

除了 info 字段,所有標頭字段的大小都是 4 字節。 它們都是采用大端字節序編碼的 32 位無符號整數。

sunau 模塊定義了以下函數:

sunau.open(file, mode)?

如果 file 是一個字符串,打開相應名稱的文件,否則就把它作為可定位的文件類對象來處理。 mode 可以是

'r'

只讀模式。

'w'

只寫模式。

注意它不支持同時讀/寫文件。

mode'r' 時返回一個 AU_read 對象,而 mode'w''wb' 時返回一個 AU_write 對象。

sunau.openfp(file, mode)?

open(),用于向后兼容。

Deprecated since version 3.7, will be removed in version 3.9.

sunau 模塊定義了以下異常:

exception sunau.Error?

當 Sun AU 規范或實現的低效導致無法操作時引發的錯誤。

sunau 模塊定義了以下數據條目:

sunau.AUDIO_FILE_MAGIC?

位于每個有效的 Sun AU 文件開頭的整數,以大端序形式存儲。 這是一個被當作整數來解讀的字符串 .snd

sunau.AUDIO_FILE_ENCODING_MULAW_8?
sunau.AUDIO_FILE_ENCODING_LINEAR_8?
sunau.AUDIO_FILE_ENCODING_LINEAR_16?
sunau.AUDIO_FILE_ENCODING_LINEAR_24?
sunau.AUDIO_FILE_ENCODING_LINEAR_32?
sunau.AUDIO_FILE_ENCODING_ALAW_8?

AU 標頭中被此模塊所支持的 encoding 字段值。

sunau.AUDIO_FILE_ENCODING_FLOAT?
sunau.AUDIO_FILE_ENCODING_DOUBLE?
sunau.AUDIO_FILE_ENCODING_ADPCM_G721?
sunau.AUDIO_FILE_ENCODING_ADPCM_G722?
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_3?
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_5?

AU 標頭中附加的已知但不被此模塊所支持的 encoding 字段值。

AU_read 對象?

由上面的 open() 所返回的 AU_read 對象具有以下幾種方法:

AU_read.close()?

關閉流,并使實例不可用。 (此方法會在刪除對象時自動調用。)

AU_read.getnchannels()?

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

AU_read.getsampwidth()?

返回采樣字節長度。

AU_read.getframerate()?

返回采樣頻率。

AU_read.getnframes()?

返回音頻總幀數。

AU_read.getcomptype()?

返回壓縮類型。 受支持的壓縮類型有 'ULAW', 'ALAW''NONE'

AU_read.getcompname()?

getcomptype() 的人類可讀的版本。 受支持的類型將為相應的名稱 'CCITT G.711 u-law', 'CCITT G.711 A-law''not compressed'

AU_read.getparams()?

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

AU_read.readframes(n)?

讀取至多 n 幀音頻并作為 bytes 對象返回。 數據將以線性格式返回。 如果原始數據為 u-LAW 格式,則它將被轉換。

AU_read.rewind()?

重置文件指針至音頻開頭.

以下兩個方法都使用指針,具體實現由其底層決定。

AU_read.setpos(pos)?

設置文件指針到特定位置。 只有從 tell() 返回的值才可被用作 pos

AU_read.tell()?

返回當前文件指針的位置。 請注意該返回值與文件中的實例位置無關。

以下兩個函數是為了與 aifc 保持兼容而定義的,實際不做任何事件。

AU_read.getmarkers()?

返回 None

AU_read.getmark(id)?

引發錯誤異常。

AU_write 對象?

由上面的 open() 所返回的 AU_write 對象具有以下幾種方法:

AU_write.setnchannels(n)?

設置聲道數。

AU_write.setsampwidth(n)?

設置采樣寬度(字節長度。)

在 3.4 版更改: 增加了對 24 位采樣的支持。

AU_write.setframerate(n)?

設置幀速率。

AU_write.setnframes(n)?

設置總幀數。 如果寫入了更多的幀,此值將會被更改。

AU_write.setcomptype(type, name)?

設置壓縮類型和描述。 對于輸出只支持 'NONE''ULAW'

AU_write.setparams(tuple)?

tuple 應該是 (nchannels, sampwidth, framerate, nframes, comptype, compname),每項的值可用于 set*() 方法。 設置所有形參。

AU_write.tell()?

返回文件中的當前位置,其含義與 AU_read.tell()AU_read.setpos() 方法的一致。

AU_write.writeframesraw(data)?

寫入音頻數據但不更新 nframes

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

AU_write.writeframes(data)?

寫入音頻數據并更新 nframes

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

AU_write.close()?

確保 nframes 正確,并關閉文件。

此方法會在刪除時被調用。

請注意在調用 writeframes()writeframesraw() 之后再設置任何形參都是無效的。