音頻技術開發,我們得對聲音有所了解,掌握音頻的基礎知識,這才能更好地去做技術開發。
首先介紹音頻基礎知識,然后介紹音頻的量化與編碼,音頻壓縮技術,音頻編解碼器選型,AAC,希望對幫助大家。
聲音三要素
- 音調 : 就是音頻,男生->女生->兒童。
聲音頻率的高低叫做音調。表示人的聽覺分辨一個聲音的調子高低的程度。音調主要由聲音的頻率決定,同時也與聲音強度有關。對一定強度的純音,音調隨頻率的升降而升降;對一定頻率的純音、低頻純音的音調隨聲強增加而下降,高頻純音的音調卻隨強度增加而上升。
- 音量: 振動的幅度。
音量又稱響度、音強,是指人耳對所聽到的聲音大小強弱的主觀感受,其客觀評價尺度是聲音的振幅大小。這種感受源自物體振動時所產生的壓力,即聲壓。物體振動通過不同的介質,將其振動能量傳導開去。人們為了對聲音的感受量化成可以監測的指標,就把聲壓分成“級”——聲壓級,以便能客觀的表示聲音的強弱,其單位稱為“分貝”(dB)。
- 音色: 它與材質有很大關系,本質就是諧波。
音色(Timbre)是指不同的聲音的頻率表現在波形方面總是有與眾不同的特性。不同的物體振動都有不同的特點。
我們為什么要了解聲音,音頻技術不是有音頻采集,音頻編碼,音頻解碼,算法等等就行了么,還要了解這么基本的知識有必要么,如果你了解個音頻技術里的倍速播放功能時,就你會發現當你倍速播放時,音調也發生了變化。
音頻采集
音頻采集一般使用 AudioRecod或者 MediaRecord
音頻采集的來源是什么?
一般是指麥克風:MediaRecorder.AudioSource.MIC
關于音頻是怎么采集的,到時候專門寫一篇音頻采集的文章,這章主要是了解音頻基礎知識。當我們采集到了聲音數據后都要對聲音數據進行量化。
音頻量化的過程
獲取模擬數據(即采集到的音頻波片段的數據)——>采樣(對音頻波進行采樣)——>量化(根據采樣點的值進行一一量化)——>編碼(根據樣本序號進行編碼)——>轉換成數字信號(即把樣本一一轉換01這樣的機器能識別的數字信號)
音頻量化基本概念
- 采樣大小: 一個采樣用多少bit存放。常用的是16bit(也有用8bit存放)
16bit 表示Y軸振幅的高度 2的16次方(聲音的振幅最高也高示過65535)
- 采樣率: 采樣頻率可分為8k 、16k、 32k、 44.1k、 48k等(對于AAC來說是采用44.1K的采樣率)
以44.1K為例,就是說每秒在模擬信號上,我們采樣441000次,比如說20Hz的頻率(20Hz也就是人聽到的最低頻率,20Hz的頻率即每秒采樣了20次),每秒鐘正弦波里,要采集多少次呢,要采樣2000次,那么對于高頻呢,比如20000Hz,那么就要采樣2次
- 聲道數: 單聲道、雙聲道、多聲道(什么叫雙聲道?就是有兩個喇叭,多聲道就是有多個喇叭)
AudioFormat.CHANNEL_IN_MONO 單聲道,一個聲道進行采樣
AudioFormat.CHANNEL_IN_STEREO 雙聲道,兩個聲道進行采樣
- 音頻采樣精度
采樣精度:聲音樣本大小bit/s表示。位數越高,聲音的保真度越高。
采樣精度決定了記錄聲音的動態范圍,它以位(Bit)為單位,比如8位、16位。8位可以把聲波分成256級,16位可以把同樣的波分成65536級的信號。
它反映度量聲音波形幅度的精度。例如,每個聲音樣本用16位(2字節)表示,測得的聲音樣本值是在0~65535的范圍里,它的精度就是輸入信號的1/65536。樣本位數的大小影響到聲音的質量,位數越多,聲音的質量越高,而需要的存儲空間也越多;位數越少,聲音的質量越低,需要的存儲空間越少。
一般都采用這個 AudioFormat.ENCODING_PCM_16BIT(官方文檔表示,該采樣精度保證所有設備都支持)
碼率計算
要算一個PCM音頻的碼率是一件很輕松的事情,采樣率 * 采樣大小 * 聲道數
例如:
采樣率為44.1KHz
采樣大小為16bit
雙聲道的PCM編碼的WAV文件
它是碼率為 44.1k * 16 * 2 =1411200b=1411.2Kb/s
每秒傳送的比特(bit)數。單位為 bps(Bit Per Second),比特率越高,傳送數據速度越快。
PCM
PCM是英文Pulse-code modulation的縮寫,中文譯名是脈沖編碼調制。
我們知道在現實生活中,人耳聽到的聲音是模擬信號,PCM就是要把聲音從模擬轉換成數字信號的一種技術,他的原理簡單地說就是利用一個固定的頻率對模擬信號進行采樣,采樣后的信號在波形上看就像一串連續的幅值不一的脈沖,把這些脈沖的幅值按一定的精度進行量化,這些量化后的數值還要進行編碼,就是用一組二進制碼組來表示每一個量化值,然后記錄到存儲介質中,所有這些組成了數字音頻的產生過程。
音頻壓縮技術
音頻壓縮技術有兩種方法,如下:
- 消除冗余數據(久損壓縮技術)
在音頻采集過程中,會采集到各種各樣的聲音,其中只有一部分聲音是我們人能夠識別出來的,其他聲音我們可以直接刪除掉,這樣能夠大大減少存儲的數據,刪除掉的這些數據,當我們壓縮完之后是完全沒有了也無法恢復。
- 哈夫曼無損編碼(無損壓縮技術)
將人無法識別的聲音刪除之后,留下來的聲音對其壓縮編碼,壓縮后的編碼還能恢復為原來一模一樣的數據,這就稱為無損壓縮技術。
音頻冗余信息
壓縮的主要方法是去除采集到的音頻冗余信息,所謂冗余信息包括人耳聽覺范圍外的音頻信號以及被掩蔽掉的音頻信號
信號的掩蔽可以分為:頻域掩蔽、時域掩蔽
頻域掩蔽: 人耳所能察覺的聲音信號的頻率范圍為20Hz~20KHz,在這個頻率范圍以外的音頻信號屬于冗余信號;或一個強純音會掩蔽在其附近同時發聲的弱純音,那么弱純音也被掩蔽,弱純音屬于冗余信號。
時域掩蔽: 在時間上相鄰的聲音之間也有掩蔽現象,主要原因是人的大腦處理信息需要花費時間。同步掩蔽效應和不同頻率聲音的頻率和相對竟是有關,而時間掩蔽則僅僅和時間有關。如果兩個聲音在時間上特別接近,分辨會有困難(如兩個聲音音量相差較大且兩個聲音間隔時間低于5毫秒,則其中弱的那個聲音會聽不到)。
下面簡單列出常見的音頻壓縮格式:
MP3,AAC,OGG,WMA,Opus,FLAC,APE,m4a,AMR,等等
音頻編碼的過程
時域轉頻域變換 —(聲學模型)—> 量化編碼 —> 比特流格式 (也可以添加輔助的數據)—> 比特流
音頻編解碼器選型
常見的音頻編碼器
- 常見的音頻編碼器包括 OPUS、AAC、Vorbis、Speex、iLBC、AMR、G.711等
- 網上評測結果: OPUS>AAC>Vorbis
常見的音頻編碼器他們的性能對比就不一一列舉了,感興趣的可以網上查閱一下。下面重點介紹一下AAC編碼器。
AAC介紹
為什么重點介紹AAC呢?
- AAC是的應用范圍廣(市面上95%以上的都是AAC編碼器)
- 傳輸協議是用rtmp,RTMP是支持AAC的不支持OPUS
- AAC是的編碼質量非常高,有一個高保幀,保持音頻的高保幀,這樣也導致很多應用使用AAC
AAC為了解決什么問題?
- AAC(Advanced Audio Coding) 目的是取代MP3格式
- MPEG-4標準出現后,AAC加入了SBR技術和PS技術
- 目前常用的規格有AAC LC、AAC HE V1、AAC HE V2
AAC規格
AAC +SBR -> AAC HE V1
AAC+SBR+PS -> AAC HE V2
AAC規格描述
- AAC LC: (Low Complexity)低復雜度,碼流128k
- AAC HE V1: AAC LC +SBR(Spectral Band Replication)碼流64k(碼流減少了,音頻質量也提高了)
- AAC HE V2: AAC LC +SBR + PS(Parametric Stereo)碼流32k(碼流減少了,音頻質量也提高了)
AAC格式
- ADIF(Audio Data Interchange Format)這種格式只能從頭開始解碼,常用在磁盤文件中
- ADTS(Audio Data Transport Stream)這種格式每一幀都有一個同步字,可以在音頻流的任何位置開始解碼,它似于數據流格式
AAC編碼庫那個好?
市面上的庫:
Libfdk_AAC > ffmpeg AAC > libfaac > libvo_aacenc
Libfdk_AAC的編碼效率更高