音頻編碼原理
本篇部落格為面向大衆的科普性文章。涉及聲音原理、音頻檔案屬性、音頻格式等方面。預計閱讀時間為10分鐘。
1.何為聲音
中學實體中我們知道,聲音是物體振動産生的聲波。聲音通過媒體(空氣、固體、液體)傳入到人耳中,帶動聽小骨振動,經過一系列的神經信号傳遞後,被人所感覺。
聲音是一種波。物體振動時會使媒體(如空氣)産生疏密變化,進而形成疏密相見的縱波。
既然聲音是波,那麼我們就可以用圖的形式來表示它。
給定空間中某一點,該點的空氣疏密随時間的變化如下:
波形圖
下圖是一個正弦波,其周期為0.002s,頻率為500HZ。
該聲音很像視訊中的“消音”處理。
頻率(音調):聲音1秒内周期性變化的次數
人耳的聽覺範圍在20Hz-20kHz。 低頻的聲音沉悶厚重,高頻的聲音尖銳刺耳。 高于 20kHz的聲音為超音波。
振幅(響度):聲音的大小
有的時候,我們用分貝(dB)形容聲音大小。值得注意的是,dB是一個比值,是一個數值,沒有任何機關标注。(功率強度之比的對數的10倍)
- 音調:聲音頻率的高低叫做音調(Pitch),是聲音的三個主要的主觀屬性,即音量(響度)、音調、音色(也稱音品) 之一。表示人的聽覺分辨一個聲音的調子高低的程度。音調主要由聲音的頻率決定,同時也與聲音強度有關
- 音量:人主觀上感覺聲音的大小(俗稱音量),由“振幅”(amplitude)和人離聲源的距離決定,振幅越大響度越大,人和聲源的距離越小,響度越大。(機關:分貝dB)
- 音色:又稱聲音的品質,波形決定了聲音的音色。聲音因不同物體材料的特性而具有不同特性,音色本身是一種抽象的東西,但波形是把這個抽象直覺的表現。音色不同,波形則不同。典型的音色波形有方波,鋸齒波,正弦波,脈沖波等。不同的音色,通過波形,完全可以分辨的。
波長越長
同等條件下,波長(頻率)是決定音調高低的因素。
同等條件下,振幅是決定音量高低的因素。
同等條件下,波紋是決定音色因素。
通過上面簡單的分析,我們已經知道聲音的音量實際上就是由聲波的振幅決定的,我們需要調整聲波的振幅。播放一個視訊,需要經曆下面幾步:
- 輸入視訊url
- 确定視訊的封裝格式
- 開始解封裝
- 識别視訊的軌道資料
- 分離軌道資料,音頻軌道、視訊軌道
- 解碼視訊資料為原始資料,解碼音頻資料為原始資料
- 做好音視訊同步
- 渲染視訊原始資料,播放音頻原始資料
通道數 麥克風
上面加黑标紅的部分就是我們改變聲音振幅的地方,隻有将聲音資料解碼為原始資料,我們加工原始資料的音頻流,然後送到AudioTrack或者OpenSL ES内部播放即可。
2.聲音采集與存儲
采樣,指把時間域或空間域的連續量轉化成離散量的過程 。
對聲音的采樣常用麥克風等裝置将聲音信号轉換成電信号,再用模/數轉換器将電信号轉換成一串用1和0表示的二進制數字(數字信号)。
我們每秒對聲音采樣上萬次,獲得上萬個按照時間順序排列的二進制數字。于是,我們就将連續變化不斷的聲音轉化成了計算機可儲存并識别的二進制數字。
:
該聲音由84700個不同的數字組成。 其中的一段數字如下:(二進制數字已轉換為十進制)
… 413, 263, 137, 15, -124, -253, -369, -463, -511, -545, -587, -632, -678, -701, -687, -659, -623, -579, -539, -473, -380, -282, -162, -35, 78, 211, 341, 430, 499, 548, 551, …
如果用圖像的形式表示該音頻,則圖像如下:(橫軸是時間,縱軸為振幅,兩個圖像分别代表左右聲道。由于聲音頻率較大,是以在圖像中的信号不是“正弦”,而是實心的。)
2.1 采樣頻率
采樣頻率指錄音裝置在一秒鐘内對聲音信号的采樣次數。采樣頻率越高,聲音的還原就越真實越自然。
目前主流的采樣頻率有22.05KHz、44.1KHz、48KHz三種。
22.05 KHz為FM廣播的聲音品質,44.1KHz為理論上的CD聲音品質。48KHz為人耳可辨識的最高采樣頻率。
直覺了解:一段連續的聲音如下
一段聲音
我們等間隔地對其采樣
最終,我們真正采樣到的音頻如下
如下圖可見,采樣頻率越高,我們獲得的聲音品質越好。
2.2 量化位數
我們不可能獲得所有時間下聲音的強度,是以聲音是等時間間隔、離散采樣的。同樣,采樣獲得的資料不可能無限的精确,如數字為63.2222222….,這無法在計算機中儲存。是以,采樣獲得的資料同樣也是離散的。
量化位數是音頻檔案的另一個參數。量化位數越大,聲音的品質越高。常用的量化位數有8位、16位和32位。
量化位數指用幾位二進制數來存儲采樣獲得的資料。量化位數為8即指用8位二進制數來存儲資料,如00010111
還是之前的例子,有一段正弦聲波,假設量化位數為3,即存儲的資料隻有000/001/010/011/100/101/110/111這8種可能。
現在,還是等距離采樣,不過采樣的點隻能落在最近的紅線上。
此時,每個點縱坐标的取值隻有二的三次方,即隻有8中可能。
由下圖可見,量化位數越大,聲音效果越好。
另外值得注意的是,不同量化位數存儲的資料不可直接比較。
如4位量化位數存儲的1111,其十進制是15,8位量化位數存儲的10000000,其十進制是64。不是因為64>15,是以後者對應的聲音比前者大。而是應該二者分别除以其總取值範圍後在比較。
前者對應的聲音比後者大。
2.3 聲道數
聲道分為單聲道與雙聲道。
單聲道即為左右耳聽到的聲音相同。
雙聲道兩耳聽到的資訊不同。相同的聲音時間、采樣頻率和比特率的情況下,雙聲道檔案的存儲空間是單聲道的兩倍。但其會給人空間感,遊戲和電影中常采用雙聲道,可達到“聽聲辨位”的效果。
示例聲音如下:
3 采樣頻率
采樣定理在1928年由美國電信工程師H.奈奎斯特首先提出來的,是以稱為奈奎斯特采樣定理。
1933年由蘇聯工程師科捷利尼科夫首次用公式嚴格地表述這一定理,是以在蘇聯文獻中稱為科捷利尼科夫采樣定理。
1948年資訊論的創始人C.E.香農對這一定理加以明确地說明并正式作為定理引用,是以在許多文獻中又稱為香農采樣定理。
奈奎斯特采樣定了解釋了采樣率和所測信号頻率之間的關系。 闡述了采樣率fs必須大于被測信号感興趣最高頻率分量的兩倍。
該頻率通常被稱為奈奎斯特頻率fN。即:
奈奎斯特采樣定理
fs >= 2fH
根據奈奎斯特采樣定理,需要數字化的模拟信号的帶寬必須被限制在采樣頻率fs的一半以下,否則将會産生混疊效應,信号将不能被完全恢複。這就從理論上要求一個理想的截頻為fs/2的低通濾波器。實際中采用的通頻帶為0fs/2的低通濾波器不可能既完全濾掉高于的fs/2的分量又不衰減接近于fs/2的有用分量。是以實際的采樣結果也必然與理論上的有差别。如果采用高于fs的采樣頻率,如圖1中為2fs,則可以很容易用模拟濾波器先濾掉高于1.5fs的分量,同時完整保留有用分量。采樣後混入的界于0.5fs1.5fs之間的分量可以很容易用數字濾波器來濾掉。這樣輸入模拟濾波器的設計将比抗混疊濾波器簡單的多。
為更好了解其原因,讓我們來看看不同速率測量的正弦波。
1. 假設 fS = fN
可以看出,無論我們從哪一點開始采樣,每次采集到的資料都是一樣的,對應的頻率成分為0Hz。
2. 假設 fS = (4/ 3) * fN
以上采樣到的曲線仍然無法還原原有波形的樣子。
3. 假設 fS = 2 * fN
如上圖,将這些采樣點連成線條,得到的信号形狀為三角波,雖然信号的頻率成分沒有失信,但是很難保證信号的幅值不失真。因為這兩個采樣點很難位于正弦信号的波峰與波谷處。也就是說,在很大程度上,采樣後的信号的幅值是失真的。
我們再考慮如下情況:
假設一條正弦曲線為sin(2π/t),頻率為1Hz。我們以2Hz的頻率對該曲線進行采樣(每隔0.5s),可以得到3個紅色采樣資料,如下圖:
對于這三個點,我們不能确定它對應的正弦曲線是sin(2π/t),因為sin(4π/t)等倍頻曲線也會穿過這三個紅色采樣點:
混疊
如果信号的采樣率低于兩倍奈奎斯特頻率,采樣資料中就會出現虛假的低頻成分。 這種現象便稱為混疊。
下圖顯示了800 kHz正弦波1MS/s時的采樣。虛線表示該采樣率時記錄的混疊信号。 800 kHz頻率與通帶混疊,錯誤地顯示為200 kHz正弦波。
絕大多數信号都是能夠進行傅裡葉變換的,就意味着,不管一個信号多麼複雜,總可以分解為若幹個正(餘)弦信号的和,對應了信号的頻率分量。是以,Nyquist采樣定理隻需找到信号最大的頻率分量,再用2倍于最大頻率分量的采樣頻率對信号進行采樣,從理論上解決了,離散信号能夠重建出連續信号的問題。