sunau --- 讀寫 Sun AU 文件?
源代碼: Lib/sunau.py
sunau 模擬提供了一個處理 Sun AU 聲音格式的便利接口。請注意此模塊與 aifc 和 wave 是兼容接口的。
音頻文件由標頭和數據組成。標頭的字段為:
域 |
目錄 |
|---|---|
magic word |
四個字節 |
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.rewind()? 重置文件指針至音頻開頭.
以下兩個方法都使用指針,具體實現由其底層決定。
-
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() 之后再設置任何形參都是無效的。
