一、音頻的基礎知識
在學習iOS音頻開發之前, 要對音頻的基礎知識和一些術語概念有一定的了解, 當然我再寫這篇文章的時候也只是了解的一些最基本的而已,所以僅供參考
1、數據的組成:
音頻文件的組成:文件格式(或者音頻容器)+ 數據格式(或者音頻編碼)。
文件格式(或音頻容器)是用于形容文件本身的格式。iPhone支持許多文件格式(音頻容器)包括:MPEG-1(.mp3),MPEG-2 ADTS(.aac),AIFF,CAF,WAVE等.但是通常在iPhone中使用的容器格式就CAF,因為它可以用來封裝iPhone所支持的所有音頻格式.詳細音頻文件格式和數據格式
iOS平臺下常見的文件格式和對應的數據格式:
不同格式之與線性PCM間的編碼和解碼轉換:
線性脈沖 (linear PCM) : 這是表示線性脈沖編碼調制,主要是描寫用于將模擬聲音數據轉換成數字格式的技術。簡單地說也就是未壓縮的數據。因為數據是未壓縮的,所以我們便可以最快速地播放出音頻,而如果空間不是問題的話這便是iPhone音頻的優先代碼選擇。
詳細可以參音頻格式蘋果文檔
2、采樣率(samplerate)
采樣就是把模擬信號數字化的過程,不僅僅是音頻需要采樣,所有的模擬信號都需要通過采樣轉換為可以用0101來表示的數字信號,示意圖如下所示:
藍色代表模擬音頻信號,紅色的點代表采樣得到的量化數值。
采樣頻率越高,紅色的間隔就越密集,記錄這一段音頻信號所用的數據量就越大,同時音頻質量也就越高。
根據奈奎斯特理論,采樣頻率只要不低于音頻信號最高頻率的兩倍,就可以無損失地還原原始的聲音。
通常人耳能聽到頻率范圍大約在20Hz~20kHz之間的聲音,為了保證聲音不失真,采樣頻率應在40kHz以上。常用的音頻采樣頻率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。
3、量化精度(位寬)
上圖中,每一個紅色的采樣點,都需要用一個數值來表示大小,這個數值的數據類型大小可以是:4bit、8bit、16bit、32bit等等,位數越多,表示得就越精細,聲音質量自然就越好,當然,數據量也會成倍增大。
常見的位寬是:8bit 或者 16bit
4、聲道數(channels)
由于音頻的采集和播放是可以疊加的,因此,可以同時從多個音頻源采集聲音,并分別輸出到不同的揚聲器,故聲道數一般表示聲音錄制時的音源數量或回放時相應的揚聲器數量。
單聲道(Mono)和雙聲道(Stereo)比較常見,顧名思義,前者的聲道數為1,后者為2
5、音頻幀(frame)
音頻跟視頻很不一樣,視頻每一幀就是一張圖像,而從上面的正玄波可以看出,音頻數據是流式的,本身沒有明確的一幀幀的概念,在實際的應用中,為了音頻算法處理/傳輸的方便,一般約定俗成取2.5ms~60ms為單位的數據量為一幀音頻。
這個時間被稱之為“采樣時間”,其長度沒有特別的標準,它是根據編解碼器和具體應用的需求來決定的,我們可以計算一下一幀音頻幀的大小:
假設某通道的音頻信號是采樣率為8kHz,位寬為16bit,20ms一幀,雙通道,則一幀音頻數據的大小為:
int size = 8000 x 16bit x 0.02s x 2 = 5120 bit = 640 byte
二、 聲音數據的計算方法:
數據量(字節/秒)= (采樣頻率(Hz)× 采樣位數(bit) × 聲道數)/ 8
單聲道的聲道數為1,立體聲的聲道數為2。
【例1】請計算對于5分鐘雙聲道、16位采樣位數、44.1kHz采樣頻率聲音的不壓縮數據量是多少?
根據公式:數據量=(采樣頻率×采樣位數×聲道數×時間)/8
得,數據量(MB)=[44.1×1000×16×2×(5×60)] /(8×1024×1024)=50.47MB
計算時要注意幾個單位的換算細節:
時間單位換算:1分=60秒
采樣頻率單位換算:1kHz=1000Hz
數據量單位換算:1MB=1024×1024=1048576B
【例2】請計算對于雙聲道立體聲、采樣頻率為44.1kHz、采樣位數為16位的激光唱盤(CD-A),用一個650MB的CD-ROM可存放多長時間的音樂?
已知音頻文件大小的計算公式如下:
文件的字節數/每秒=采樣頻率(Hz)X采樣位數(位)X聲道數/8
根據上面的公式計算一秒鐘時間內的不壓縮數據量:(44.1×1000×16×2)/8=0.168MB/s
那么,一個650MB的CD-ROM可存放的時間為:(650/0.168)/(60×60)=1.07小時。