python3从零学习-5.11.2、 aifc - 读取和写入AIFF和aifc文件
源代碼:Lib / aifc.py
這個模塊提供了對讀寫AIFF和AIFF- c文件的支持。AIFF是一種音頻交換文件格式,用于在文件中存儲數字音頻樣本。AIFF-C是該格式的更新版本,它包含了壓縮音頻數據的能力。
?
音頻文件有許多描述音頻數據的參數。采樣率或幀率是聲音每秒被采樣的次數。頻道的數量表明,如果音頻是單聲道,立體聲,或quadro。每個幀由每個通道一個樣本組成。樣本大小是以字節(jié)為單位的每個樣本的大小。因此,一個幀由nchannels *采樣字節(jié)組成,而一秒鐘的音頻由nchannels *采樣字節(jié)組成。
?
例如,CD質量的音頻有兩個字節(jié)(16位)的樣本大小,使用兩個通道(立體聲)和有44100幀/秒的幀率。這使得幀大小為4字節(jié)(2*2),一秒鐘的值占用2*2*44100字節(jié)(176,400字節(jié))。
?
模塊aifc定義了以下功能:
?
aifc.open(file, mode=None)
打開一個AIFF或AIFF- c文件,并返回一個帶有下面描述的方法的對象實例。參數文件是命名文件的字符串或文件對象。當必須打開文件進行讀取時,模式必須為'r'或'rb',當必須打開文件進行寫入時,模式必須為'w'或'wb'。如果省略,文件。如果存在,則使用mode,否則使用'rb'。當用于寫入時,文件對象應該是可查找的,除非您提前知道總共要寫入多少個示例并使用writeframesraw()和setnframes()。open()函數可以在with語句中使用。當with塊完成時,將調用close()方法。
open()在打開文件進行讀取時返回的對象有以下方法:
?
aifc.getnchannels()
返回音頻通道的數量(1為單聲道,2為立體聲)。
?
aifc.getsampwidth()
以字節(jié)為單位返回單個樣本的大小。
?
aifc.getframerate()
返回采樣率(每秒音頻幀數)。
?
aifc.getnframes()
返回文件中音頻幀的數目。
?
aifc.getcomptype()
返回長度為4的字節(jié)數組,描述音頻文件中使用的壓縮類型。對于AIFF文件,返回值為b' none '。
?
aifc.getcompname()
返回可轉換為音頻文件中使用的壓縮類型的人類可讀描述的字節(jié)數組。對于AIFF文件,返回值為b'未壓縮'。
?
aifc.getparams()
返回一個namedtuple () (nchannels sampwidth,幀速率,nframes, comptype, compname),與得到*()方法的輸出相同。
?
aifc.getmarkers()
返回音頻文件中的標記列表。標記由三個元素組成的元組。第一個是標記ID(一個整數),第二個是標記在幀中從數據開始的位置(一個整數),第三個是標記的名稱(一個字符串)。
?
aifc.getmark(id)
返回getmarkers()中描述的具有給定id的標記的元組。
?
aifc.readframes(nframes)
從音頻文件讀取并返回下一個nframes幀。返回的數據是一個字符串,每個幀包含所有通道的未壓縮樣本。
?
aifc.rewind()
倒回讀指針。下一個readframes()將從頭開始。
?
aifc.setpos(pos)
查找指定的幀號。
?
aifc.tell()
返回當前幀號。
?
aifc.close()
關閉AIFF文件。調用此方法后,將不再使用該對象。
?
當文件被打開以便寫入時,open()返回的對象具有上述所有方法,除了readframes()和setpos()。此外,存在以下方法。get*()方法只能在調用相應的set*()方法之后調用。在第一個writeframes()或writeframesraw()之前,除了幀數以外的所有參數都必須填寫。
?
aifc.aiff()
創(chuàng)建一個AIFF文件。默認情況下,創(chuàng)建一個AIFF-C文件,除非文件名稱以'結尾。在這種情況下,默認是一個aiff文件。
?
aifc.aifc()
創(chuàng)建一個AIFF-C文件。默認情況下,創(chuàng)建一個AIFF-C文件,除非文件名稱以'結尾。在這種情況下,默認是一個aiff文件。
?
aifc.setnchannels(nchannels)
指定音頻文件中的通道數。
?
aifc.setsampwidth(width)
指定音頻樣本的大小,以字節(jié)為單位。
?
aifc.setframerate(rate)
指定采樣頻率(單位為每秒幀數)。
?
aifc.setnframes(nframes)
指定要寫入音頻文件的幀數。如果沒有設置該參數,或者設置不正確,則文件需要支持查找。
?
aifc。setcomptype(type, name)
指定壓縮類型。如果沒有指定,音頻數據將不會被壓縮。在AIFF文件中,壓縮是不可能的。name參數應該是人類可讀的對壓縮類型的描述,作為字節(jié)數組,類型參數應該是長度為4的字節(jié)數組。目前支持以下壓縮類型:b' none ', b' ulaw ', b' alaw ', b' g722 '。
?
aifc。setparams(nchannels, sampwidth, framerate, comptype, compname)
立即設置以上所有參數。參數是由各種參數組成的元組。這意味著可以使用getparams()調用的結果作為setparams()的參數。
?
aifc。setmark(id, pos, name)
在給定位置添加具有給定id(大于0)和給定名稱的標記。可以在close()之前的任何時候調用此方法。
?
aifc.tell()
返回輸出文件中的當前寫入位置。與setmark()結合使用。
?
aifc.writeframes(data)
將數據寫入輸出文件。此方法只能在設置了音頻文件參數后調用。
?
aifc.writeframesraw(data)
類似于writeframes(),除了音頻文件的頭沒有被更新。
?
aifc.close ()
關閉AIFF文件。文件的頭被更新以反映音頻數據的實際大小。調用此方法后,將不再使用該對象。
?
總結
以上是生活随笔為你收集整理的python3从零学习-5.11.2、 aifc - 读取和写入AIFF和aifc文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人不建议TIM更新至 3.1.1版本,
- 下一篇: CC00020.python——|Had