文章變更表
| 文章版本號 | 變更內(nèi)容 | 變更日期 | 備注 |
|---|---|---|---|
| 0.0.1 | 創(chuàng)建 | 2022/9/29 | 初版 |
| 0.0.2 | 補充編碼原理和音頻格式等內(nèi)容 | 2022/9/30 | 無 |
1. 前言
在【Android音視頻開發(fā)】 這一系列文章的開頭,介紹一下音頻編碼的原理是很有必要的,有利于對后續(xù)出現(xiàn)的概念的理解。此處先講音頻,視頻編碼的原理將在另一篇文章中講述。
2. 正文
2.1 聲音的本質(zhì)
聲音的本質(zhì)是在介質(zhì)中傳遞的聲波,既然是一種波,那么它就會具有以下幾個波的特征:頻率、振幅和波長。頻率越大聲音越尖細(xì),振幅越大聲音越洪亮。
2.2 聲音的數(shù)字化
自然界中的聲音波形都是連續(xù)的,稱為模擬音頻(模擬信號),人們通過收音設(shè)備采集到的模擬信號,會以0、1這樣的二進制數(shù)據(jù)進行存儲,通過這種形式存儲的音頻稱為數(shù)字音頻(數(shù)字信號)。下面介紹一下采樣的概念和幾個描述數(shù)字音頻的關(guān)鍵參數(shù)。
- 采樣:將模擬音頻通過收音設(shè)備進行采集,從而得到數(shù)字音頻的過程稱為“采樣”。
- 采樣率:單位時間(1秒)內(nèi)對模擬音頻采集的次數(shù)稱為“采樣率”,采樣率越大,聲音的還原度越高、越真實,常見的采樣率有16kHz、44.1kHz和48kHz。
- 采樣位數(shù):可以理解數(shù)字音頻設(shè)備處理聲音的解析度,即對聲音的辨析度。就像表示顏色的位數(shù)一樣(8位表示256種顏色,16位表示65536種顏色),有8位,16位,24位等。這個數(shù)值越大,解析度就越高,錄制和回放的聲音就越真實。
- 比特率:表示單位時間(1秒)內(nèi)傳送的比特數(shù)bps(bit per second,位/秒)的速度。作為一種數(shù)字音樂壓縮效率的參考性指標(biāo),通常使用kbps(通俗地講就是每秒鐘1024比特)作為單位。
2.3 音頻編碼的重要性
根據(jù)2.2中提到的概念,我們可以得到一個數(shù)字音頻文件占用空間大小的算法,用S表示占用存儲空間大小的話,S=(采樣率x采樣位數(shù)x聲道數(shù))/8x音頻時長。
假設(shè)現(xiàn)在有一段音頻,采樣率為44.1KHZ,采樣位數(shù)為16位,左右雙聲道(立體聲),時長為5分鐘。那么它占用存儲空間的大小S=(44100162)/8(560)=52920000字節(jié),轉(zhuǎn)為MB為 52920000/1024/1024≈50.47MB(兆字節(jié)),也就是說,我們存儲這樣一段5分鐘的音頻就需要占用50MB的空間,這在大容量存儲設(shè)備普及前以及傳輸帶寬很小的古早時期是很難接受的,因此對數(shù)字音頻進行編碼的需求迫在眉睫。
2.4 編碼原理
數(shù)字音頻壓縮編碼是在保證信號在聽覺方面不產(chǎn)生失真的前提下,對音頻數(shù)據(jù)信號盡可能大的壓縮,降低數(shù)據(jù)量。數(shù)字音頻壓縮編碼采取去除聲音信號中的冗余成分的方法來實現(xiàn)。所謂冗余成分指的是音頻中不能被人耳感知到的信號,即[20, 20k]Hz以外頻率的信號,這些信號對確定聲音的音色,音調(diào)等信息沒有任何的幫助。
此外,根據(jù)人耳聽覺的生理和心理聲學(xué)現(xiàn)象,當(dāng)一個強音信號與一個弱音信號同時存在時,弱音信號將被強音信號所遮蔽而聽不見,這樣弱音信號就可以視為冗余信號而不用傳送。這就是人耳聽覺的掩蔽效應(yīng),主要表現(xiàn)在頻譜掩蔽效應(yīng)和時域掩蔽效應(yīng)。
2.4.1 頻譜掩蔽效應(yīng)

一個頻率的聲音音量(db)小于某個閾值,人耳就會聽不到。當(dāng)有另外能量較大的聲音出現(xiàn)的時候,該聲音頻率附近的閾值就會提高很多,即所謂的掩蔽效應(yīng),如上圖所示。
由圖中我們可以看出人耳對2KHz~5KHz的聲音最敏感,而對頻率太低或太高的聲音信號都很遲鈍,當(dāng)有一個頻率為0.2KHz、強度內(nèi)60db的聲音出現(xiàn)時,其附近的閾值提高了很多。
由圖中我們可以看出在0.1KHz以下、1KHz以上的部分,由于離0.2KHz強信號較遠(yuǎn),不受0.2KHz強信號影響,閾值不受影響。而在0.1KHz-1KHz范圍,由于0.2KHz強音的出現(xiàn),閾值有較大的提升,人耳在此范圍所能感覺到的最小聲音強度大幅提升。如果0.1KHz-1KHz范圍內(nèi)的聲音信號的強度在被提升的閾值曲線之下,由于它被0.2KHz強音信號所掩蔽,那么此時我們?nèi)硕荒苈牭?.2KHz的強音信號而根本聽不見其它弱信號,這些與0.2KHz強音信號同時存在的弱音信號就可視為冗余信號而不必傳送。
20hz和20khz左右音量需要非常大才能聽見,如果在0.2khz時音量很大,就會出現(xiàn)掩蔽效應(yīng),即在0.2khz音量很大的點的附近頻率的聲音也需要很大才能聽得見。于是我們不需要編碼掩蔽閾值以下部分的聲音,因為這部分的聲音人很難聽到。
2.4.2 時域掩蔽效應(yīng)
在強音和弱音信號同時出現(xiàn)時,還存在時域掩蔽效應(yīng)。即兩者發(fā)生時間很接近的時候,也會發(fā)生掩蔽效應(yīng)。時域掩蔽過程曲線如圖所示,分為前掩蔽、同時掩蔽和后掩蔽三部分。

前掩蔽
人耳在聽到強信號之前的短暫時間內(nèi),已經(jīng)存在的弱信號或被掩蔽而聽不到同時掩蔽
當(dāng)強信號與弱信號同時存在時,弱信號會被強信號所掩蔽而聽不到后掩蔽
強信號消失后,需經(jīng)過較長的一段時間才能重新聽見弱信號
這些被掩蔽的弱信號可以視為冗余信號。
突然有強音,這時弱信號聽不見
強音消失后一段時間后才能聽見弱信號
2.5 壓縮編碼方法
當(dāng)前數(shù)字音頻編碼領(lǐng)域存在不同編碼方案和實現(xiàn)方式,基本編碼思路大同小異,如圖所示:

對每一個音頻聲道中的音頻采樣信號進行以下處理:
- 將他們映射到頻域中,這種時域到頻域的映射可通過子帶濾波器實現(xiàn)。每個聲道中的音頻采樣塊首先要根據(jù)心理聲學(xué)模型來計算掩蔽門限值(人耳對1kHz-7kHz較為敏感)
- 由計算出的掩蔽門限值決定從公共比特池中分配給該聲道不同頻率域中多少比特數(shù),接著進行量化以及編碼工作
- 將控制參數(shù)及輔助數(shù)據(jù)加入數(shù)據(jù)之中,產(chǎn)生編碼后的數(shù)據(jù)流
2.6 常用音頻編碼格式
這里只介紹兩種在開發(fā)中用的比較多的音頻編碼格式:PCM 和 AAC
2.6.1 PCM
PCM全稱Pulse-Code Modulation,翻譯一下是脈沖調(diào)制編碼。在音視頻中,PCM是一種用數(shù)字表示采樣模擬信號的方法。
要將一段音頻模擬信號轉(zhuǎn)換為數(shù)字表示,包含如下三個步驟:
- Sampling(采樣)
- Quantization(量化)
- Coding(編碼)
2.6.2 AAC
AAC,全稱Advanced Audio Coding,中文名:高級音頻編碼,是一種專為聲音數(shù)據(jù)設(shè)計的文件壓縮格式。與MP3不同,它采用了全新的算法進行編碼,更加高效,具有更高的“性價比”。利用AAC格式,可使人感覺聲音質(zhì)量沒有明顯降低的前提下,更加小巧。蘋果ipod、諾基亞手機支持AAC格式的音頻文件。
優(yōu)點:相對于mp3,AAC格式的音質(zhì)更佳,文件更小。
不足:AAC屬于有損壓縮的格式,與時下流行的APE、FLAC等無損格式相比音質(zhì)存在“本質(zhì)上”的差距。加之,傳輸速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC頭上“小巧”的光環(huán)不復(fù)存在。
2.7 音頻幀長
其實,音頻的幀的概念沒有視頻幀那么清晰,幾乎所有視頻編碼格式都可以簡單的認(rèn)為一幀就是編碼后的一副圖像。但音頻幀跟編碼格式相關(guān),它是各個編碼標(biāo)準(zhǔn)自己實現(xiàn)的。因為如果以PCM(未經(jīng)編碼的音頻數(shù)據(jù))來說,它根本就不需要幀的概念,根據(jù)采樣率和采樣精度就可以播放了。
比如采樣率為44.1kHZ,采樣精度為16位的音頻,你可以算出bitrate(比特率)是44100 x 16kbps,每秒的音頻數(shù)據(jù)是固定的44100 x 16 / 8 字節(jié)。
對采樣率為44.1kHz的AAC(Advanced Audio Coding)音頻進行解碼時,一幀的解碼時間須控制在23.22毫秒內(nèi)。通常是按1024個采樣點為一幀。
2.8 音頻播放過程
播放音樂時,應(yīng)用程序從存儲介質(zhì)中讀取音頻數(shù)據(jù)(MP3、WMA、AAC),進過解碼后,最終送到音頻驅(qū)動程序中的就是PCM數(shù)據(jù),反過來,在錄音時,音頻驅(qū)動不停地把采樣所得到的PCM數(shù)據(jù)送回給應(yīng)用程序,由應(yīng)用程序完成壓縮、存儲等任務(wù)。所以,音頻驅(qū)動的兩大核心任務(wù)就是:
playback:把用戶空間的應(yīng)用程序發(fā)過來的PCM數(shù)據(jù),轉(zhuǎn)化為人耳可以辨別的模擬音頻。
capture:把mic拾取得到的模擬信號,經(jīng)過采樣、量化,轉(zhuǎn)化為PCM信號送回給用戶空間的應(yīng)用程序。