sunau
--- 讀寫 Sun AU 檔案¶
原始碼:Lib/sunau.py
sunau
模組 (module) 提供了一個處理 Sun AU 聲音格式的便利介面。請注意此模組與 aifc
和 wave
的介面是相容的。
音訊檔案由標頭 (header) 和資料組成。標頭包含以下欄位:
欄位 |
內容 |
---|---|
magic word |
四個位元組 |
header size |
標頭的大小,包括資訊,以位元組為單位。 |
data size |
資料的物理大小,以位元組為單位。 |
encoding |
表示音訊取樣的編碼方式。 |
sample rate |
取樣頻率。 |
# of channels |
取樣中的聲道數。 |
info |
音訊檔案描述的 ASCII 字串(會以空位元組填補 (pad))。 |
除了 info 欄位以外,所有其他標頭中欄位的大小都是 4 位元組,他們都是以 big-endian 位元組順序所編碼的 32-bit(位元)unsigned integers(無符號整數)
sunau
模組定義了以下函式:
- sunau.open(file, mode)¶
如 file 是一個字串,則以此名開啟檔案,否則把它當作一個可以被搜尋的 file-like object(類檔案物件)。mode 可以是以下任一
'r'
唯讀模式。
'w'
唯寫模式。
請注意這並不允許讀/寫檔案。
mode 若設為
'r'
則會回傳一個AU_read
物件,若設為'w'
或'wb'
則回傳AU_write
物件。
sunau
模組定義了以下例外:
- exception sunau.Error¶
在不符合 Sun AU 規格或實作上有所不足而無法達成某些目的時會引發的錯誤。
sunau
模組定義了以下資料條目:
- sunau.AUDIO_FILE_MAGIC¶
每個 Sun AU 檔案都會作為開頭的一個整數,以 big-endian 形式儲存。這也是
.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 物件擁有以下 method(方法):
- AU_read.close()¶
關閉串流 (stream),並使該實例無法被使用。(這會自動在刪除時呼叫。)
- AU_read.getnchannels()¶
回傳音訊聲道數量(單聲道為 1,雙聲道為 2)。
- AU_read.getsampwidth()¶
回傳取樣位元組長度。
- AU_read.getframerate()¶
回傳取樣頻率。
- AU_read.getnframes()¶
回傳音訊總幀數。
- AU_read.getcomptype()¶
回傳壓縮種類。支援的壓縮種類有
'ULAW'
、'ALAW'
和'NONE'
。
- AU_read.getcompname()¶
可被人類讀懂 (human-readable) 的
getcomptype()
。有被支援的種類分別有這些名稱'CCITT G.711 u-law'
、'CCITT G.711 A-law'
和'not compressed'
。
- AU_read.getparams()¶
回傳一個
namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,與get*()
methods 的輸出相同。
- AU_read.readframes(n)¶
讀取並以
bytes
物件形式回傳音檔中至多 n 幀,資料會以線性格式 (linear format) 回傳,如果原始資料是 u-LAW 格式,則它會被轉換。
- AU_read.rewind()¶
重置檔案指標 (file pointer) 至音訊開頭。
以下兩個 methods 都定義了在它們之間相容的 "position",否則會與實作相依。
- AU_read.tell()¶
回傳當前檔案指標位置,要注意回傳值和真實檔案中的位置無關。
以下兩個函式單純是為了和 aifc
相容而定義,並沒有做什麼特別的。
- AU_read.getmarkers()¶
回傳
None
。
- AU_read.getmark(id)¶
引發錯誤。
AU_write 物件¶
如上述 open()
所回傳的 AU_write 物件擁有以下 methods:
- AU_write.setnchannels(n)¶
設定聲道數。
- AU_write.setsampwidth(n)¶
設定取樣寬度(以位元組為單位)。
在 3.4 版的變更: 新增對於 24-bit 取樣的支援。
- AU_write.setframerate(n)¶
設定影格率 (frame rate)。
- AU_write.setnframes(n)¶
設定幀數,該值可以在寫入更多幀後修改。
- AU_write.setcomptype(type, name)¶
設定壓縮種類和敘述,輸出只支援
'NONE'
和'ULAW'
。
- AU_write.setparams(tuple)¶
tuple 應為
(nchannels, sampwidth, framerate, nframes, comptype, compname)
形式,各個值應該要是set*()
methods 能有效接受的值。該函數會一次設定所有參數。
- AU_write.tell()¶
回傳當前檔案中的位置,帶有和
AU_read.tell()
與AU_read.setpos()
方法相同的免責聲明 (disclaimer)。
- AU_write.writeframesraw(data)¶
寫入音訊資料但不更新 nframes。
在 3.4 版的變更: 現在可接受任意 bytes-like object。
- AU_write.writeframes(data)¶
寫入音訊資料並更新 nframes 以確保其正確性。
在 3.4 版的變更: 現在可接受任意 bytes-like object。
- AU_write.close()¶
確保 nframes 是正確的,並關閉檔案。
此 method 會在刪除時呼叫。
請注意,在呼叫 writeframes()
或 writeframesraw()
後設定任何參數都是無效的。