了解了音視頻的相關知識,可以先閱讀下面兩篇文章:
本篇總結下音頻基礎知識,將從以下幾個方面進行介紹:
- 聲音的產生
- 聲音的三要素
- 模數轉換
- 原始音頻數據
- PCM 與 Wav
- 音頻處理流程
聲音的產生#
聲音是由物體振動產生的,通過空氣、固體、液體等介質進行傳輸的一種聲波,可以被人耳識別的聲波的範圍是 20Hz~20000Hz 之間,也叫做可聽聲波,這種聲波稱之為聲音,根據聲波頻率的不同可以主要分為:
- 可聽聲波:20Hz~20kHz
- 超聲波:> 20kHz
- 次聲波:< 20Hz
此外,人的發聲範圍一般是 85Hz~1100Hz。
聲音的三要素#
聲音的三要素分別是音調、音量、音色,具體如下:
- 音調:指的是聲音頻率的高低,表示人的聽覺分辨一個聲音的調子高低的程度,物體振動的快,發出的聲音的音調就高,振動的慢,發出的音調就低。
- 音量:又稱音強、響度,指聲音的振幅大小,表示人耳對所聽到的聲音大小強弱的主觀感受。
- 音色:又稱音品,指不同聲音表現在波形方面總是有與眾不同的特性,不同的物體振動都有不同的特點,反映每個物體發出的聲音的特有的品質,音色具體由諧波決定,好聽的聲音絕不僅僅是一個正弦波,而是諧波。
模數轉換#
聲音是一個模擬音頻信號,如果要將聲音數字化,則需要將模擬音頻信號轉換為數字信號,這就是模數轉換,主要流程包括採樣、量化、編碼,如下圖所示:
- 採樣:連續信號轉換為離散信號的過程,每個一定時間的信號值來替代原來時間段連續的信號值,這個 1s 內的採樣次數就是採樣率,如 8KHz 是電話信號的採樣率,可以滿足通話需要,音頻 CD 一般是 44.1kHz,數字電視一般是是 48kHz,採樣率越高聲音的還原成度越高。
- 量化:將採樣後 的模擬信號轉換為數字信號的過程,量化分為均勻量化和非均勻量化,上圖中顯然使用了均勻量化,量化級數是 8。
- 編碼:將量化後的信號轉換為對應的二進制代碼,最簡單就是自然二進制碼,其他編碼方式感興趣自行去了解,上圖中編碼指的是信源編碼,除此之外還有信道編碼。
原始音頻數據#
PCM((Pulse Code Modulation)是脈衝編碼調製,實際上就是將模擬音頻信號轉換為數字音頻信號,音視頻中的 PCM 指的是未經壓縮的音頻採樣數據,是音頻信號經採樣、量化、編碼生成的原始音頻數據,PCM 數據關鍵量化指標如下:
- Sample Size:採樣大小,也是量化級數,表示一個採樣用多少位 bit 存放,常用的是 16 位。
- Sample Rate:採樣率,表示每次採樣的次數,單位 Hz,常見的採樣率有 8k、16k、32k、44.1k、48k 等。
- Number of Channels:聲道數,表示當前 PCM 數據中包含的聲道數,如單聲道、雙聲道、多聲道等。
- Byte Ordering:字節序,表示 PCM 數據存儲的字節序是大端存儲 (big-endian) 還是小端存儲 (little-endian),為了數據處理效率的高效,通常為小端存儲。
- Sign:表示當前 PCM 數據是否有符號位
- Integer Or Floating Point:表示當前 PCM 數據使用整型還是浮點型來表示。
了解了表示 PCM 數據的量化指標之後,那麼碼率如何計算呢,碼率就是一秒鐘採樣數據的多少,計算方式如下:
採樣率 * 採樣大小 * 聲道數
舉個例子:
採樣率 44.1KHz,採樣大小為 16bit,雙聲道的 PCM 編碼的 WAV 文件,其碼率為 44.1K *_16 *_2 = 1411.2Kb/s,假設傳輸上述音頻,每秒將超過 1M 的數據量,再加上在數據傳輸過程中,上行速率往往遠小於下行速率,這就需要壓縮音頻數據了。
PCM 與 WAV#
PCM 可以查看前面小節,WAV 是一種無損的音頻文件格式,其對音頻的編碼沒有硬性規定,可以是 PCM 也可以是其他編碼方式,比如 MP3 編碼等,簡單總結一下:
- PCM:一種編碼方式,在音視頻領域則理解為原始音頻數據裸流;
- WAV:一種音頻文件格式,可存儲 PCM 數據,相當於在 PCM 基礎上添加了 WAV 頭部。
最後附上一張 WAV 的 Header 示意圖:
更多細節後續研究後補充。
音頻處理流程#
簡單講一下音頻的處理流程,一是音頻文件的生成,如在 Android 中使用 AudioRecord
、MediaRecord
等採集到的音頻數據就是 PCM 數據,這種數據屬於數字音頻信號,是原始的 PCM 裸流,PCM 數據經過編碼也就是將 PCM 數據壓縮,在通過復用生成對應的音頻文件,二是音頻文件的播放,經解復用、解碼轉換成 PCM 進行播放。