使用 Python (aifc) 讀取和寫入 AIFF 和 AIFC 檔案
aifc 模組中的各種函式提供了對讀取和寫入 AIFF(音訊交換檔案格式)和 AIFF-C 檔案的支援。AIFF 格式用於將數字音訊樣本儲存在檔案中。其更新版本 AIFF-C 能夠壓縮音訊資料。
音訊檔案包含許多描述音訊資料的引數。
取樣率或幀率:每秒鐘對聲音進行取樣的次數。
聲道數:指示音訊是單聲道、立體聲還是四聲道。
幀:每個聲道包含一個樣本。
樣本大小:每個樣本的位元組大小。
因此,一個幀包含聲道 * 樣本大小位元組。1 秒的音訊資料為聲道 * 樣本大小 * 幀率位元組。
aifc 模組中定義了以下函式
aifc.open()
此函式開啟一個 AIFF 或 AIFF-C 檔案,並返回一個物件例項,用於根據模式讀取/寫入音訊資料。如果必須開啟檔案以進行讀取,則它必須是“r”或“rb”。如果必須開啟檔案以進行寫入,則它應該是“w”或“wb”。
使用寫入模式的物件使用以下函式
| aiff() | 建立 AIFF 檔案。 |
| aifc() | 建立 AIFF-C 檔案。 |
| setnchannels() | 指定音訊檔案中的聲道數。 |
| setsampwidth() | 指定音訊樣本的位元組大小。 |
| setframerate() | 指定每秒的取樣頻率(以幀為單位)。 |
| setnframes() | 指定要寫入音訊檔案的幀數。 |
| setcomptype() | 指定壓縮型別。AIFF 檔案不支援壓縮。支援的壓縮型別 - b'NONE'、b'ULAW'、b'ALAW'、b'G722'。 |
| setparams() | 一次設定所有上述引數。引數是一個元組,包含各種引數。 |
| writeframes() | 將資料寫入輸出檔案。 |
| writeframesraw() | 類似於 writeframes(),但不會更新音訊檔案的頭部。 |
以下程式建立了一個 AIFF 檔案
import aifc, struct
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
obj = aifc.open('sound.aiff','w')
obj.setnchannels(1) # mono
obj.setsampwidth(2)
obj.setframerate(sampleRate)
for i in range(99999):
value = random.randint(-32767, 32767)
data = struct.pack('<h', value)
obj.writeframesraw( data )
obj.close()aiff 或 aiff-c 讀取物件使用以下函式
| getnchannels() | 返回音訊通道數(單聲道為 1,立體聲為 2)。 |
| getsampwidth() | 返回單個樣本的位元組大小。 |
| getframerate() | 返回取樣率(每秒的音訊幀數)。 |
| getnframes() | 返回檔案中的音訊幀數。 |
| getcomptype() | 返回一個長度為 4 的位元組陣列,描述音訊檔案中使用的壓縮型別。 |
| getparams() | 返回一個 namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname |
| readframes() | 讀取並返回音訊檔案中的下一個 nframes 幀。 |
| setpos(pos) | 跳轉到指定的幀號。 |
這些函式可用於可讀和可寫的 aiff 物件
| rewind() | 倒回讀取指標。下一個 readframes() 將從開頭開始。 |
| tell() | 返回當前幀號。 |
| close() | 關閉 AIFF 檔案。呼叫此方法後,該物件將無法再使用。 |
示例
以下程式讀取 aiff 檔案的屬性
import aifc
obj = aifc.open('sound.aiff','r')
print( "Number of channels",obj.getnchannels())
print ( "Sample width",obj.getsampwidth())
print ( "Frame rate.",obj.getframerate())
print ("Number of frames",obj.getnframes())
print ( "parameters:",obj.getparams())
obj.close()輸出
Number of channels 1 Sample width 2 Frame rate. 44100 Number of frames 99999 parameters: _aifc_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype=b'NONE', compname=b'not compressed')
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP