音訊入門
聲音三要素
-
音調
聲音震動的頻率。高音低音、女聲男生。
-
音量
聲音震動的幅度。
-
音色
取決於材質,本質是諧波。
人類聽覺範圍
在進行音訊壓縮時,對於特定赫茲的資料(比如超聲波和次聲波),可以選擇忽略。
音訊的量化與編碼
量化的過程
五張圖代表不同的階段:
-
擷取一個音訊片段
-
對音訊振幅進行取樣
若干次橫向均分量化
-
對音訊高度進行量化
若干次縱向均分
-
對片段進行編碼
將量化的音訊資訊進行二進位制轉化
-
數字訊號轉化
在二進位制
1
位置時進行發聲
-
取樣大小
一個振幅高度取樣用多少位(bit)存放。通常是16位(bit)
-
取樣率
在音訊中,每秒採集的高度資訊次數。8k、16k、32k、44.1k、48k
不同的編碼方式有不同的取樣率,比如AAC
使用的是44.1k取樣率。
-
聲道數
單聲道,雙聲道,多聲道
位元速率計算
取樣率×取樣大小×聲道數
AAC
編碼壓縮後可以大概128kb/s,AAC HE V2
編碼可以達到32kb/s。
音訊壓縮
有失真壓縮技術
消除冗餘資料
關於冗餘資訊:
- 超出人類聽覺範圍
- 被遮蔽掉的音訊訊號
- 頻域遮蔽
- 時域遮蔽
- 頻域遮蔽效應
一個聲音會掩蓋另一個聲音(圖中橫向為頻率,總想為分貝)。
紅色聲源
會掩蓋其他紫色聲源
而無法掩蓋綠色聲源
白色區域
雖然在人耳聽覺範圍之內,但是由於音量不夠,也是聽不到的。
- 時域遮蔽效應
當一個高分貝的聲音出現時,其前後一定時間內的低分貝聲音會被遮蔽
該圖橫向為毫秒,縱向為分貝
編碼過程
無失真壓縮
哈夫曼無損編碼
音訊編解碼器
常見的音訊編解碼器:OPUS、ACC、Vorbis、Speex、iLBC、AMR、G.711
OPUS
當前十分流行的音訊編解碼器。內部具有基於口(速度快)、耳(高保真)兩個編解碼模型。
AAC
也是一種流行的音訊編解碼器。具有高保真的特性,由於RTMP協議的支援性良好,主要應用於直播業務中。
Speex
在AAC與OPUS之前的主流音訊編解碼器。包括迴音消除,降噪等等輔助模組。
G.711
固話的編解碼器
解碼器的比較
網上的測評結果中:OPUS>
ACC>
Vorbis
上圖中橫軸是音訊編碼位元速率,縱軸是音訊頻帶資訊。從圖中我們可以獲得如下幾方面資訊。
(1)對於固定位元速率的編碼標準,如G.711或者G.722,圖中採用單點表示,說明這兩個編碼標準是固定位元速率編碼標準。其他如Opus、Speex,它們的曲線是連續的,說明這類編碼標準是可變位元速率的編碼標準。
(2)從頻帶方面看,G.711、G.722、AMR和iLBC等標準適用於narrowband(8khz取樣率)和wideband(16khz取樣率)範圍,針對普通的語音通話場景。AAC和MP3適用於fullband(48khz取樣率)範圍,針對特殊的音樂場景。而Opus適用於整個頻帶,可以進行最大範圍的動態調節,適用範圍最廣。
(3)從標準的收費情況看,適用於網際網路傳輸的iLBC、Speex和Opus都是免費且開源的;適用於音樂場景的MP3和AAC,需要license授權,而且不開源。
AAC編解碼器
應用範圍廣
- 大部分的直播系統。
- RTMP傳輸協議支援ACC與Speex,但並不支援OPUS。
- 音訊編碼可以做到高保真。
產生的目的
取代MP3格式
MP3使用的是MPEG-2編解碼規範的有失真壓縮。而AAC使用的是MPEG-4規範,壓縮率更高,損耗更小。
常用規格
AAC LC
、AAC HE V1
、AAC HE V2
對應關係如下所示
-
AAC LC (Low Complexity)
低複雜度,碼流128kb/s
-
AAC HE V1
在
AAC LC
的基礎上增加了SBR(Spectral Band Replication)
,碼流64kb/s左右
SBR指的是頻段複製
簡要敘述一下,音樂的主要頻譜集中在低頻段,高頻段幅度很小,但很重要,決定了音質。
SBR把頻譜切割開來,降低低頻波段的取樣率以減少檔案大小,提高高頻波段的取樣率以提高音質。
-
AAC HE V2
在
AAC HE V1
的基礎上增加了Parametric Stereo)
,碼流32kb/s左右
PS指的是引數立體聲
原來的立體聲檔案檔案大小是一個聲道的兩倍。
但是兩個聲道的聲音存在某種相似性,根據夏農資訊熵編碼定理,相關性應該被去掉才能減小檔案大小。所以PS技術儲存了一個聲道的全部資訊,然後,花很少的位元組用引數描述另一個聲道和它不同的地方。
AAC音訊檔案解析
-
ADIF
Audio Data Interchange Format 音訊資料交換格式
這種格式的特徵是可以確定的找到這個音訊資料的開始,不需進行在音訊資料流中間開始的解碼,即它的解碼必須在明確定義的開始處進行。故這種格式常用在磁碟檔案中。
-
ADTS
Audio Data Transport Stream 音訊資料傳輸流
種格式的特徵是它的每一幀頭部都包含一個同步字,解碼可以在這個流中任何位置開始。它的特徵類似於mp3資料流格式。
-
二者區別
簡單說,ADTS可以在任意幀解碼,也就是說它每一幀都有頭資訊。ADIF只有一個統一的頭,所以必須得到所有的資料後解碼。
目前一般編碼後的和抽取出的都是ADTS格式的音訊流。
二者的頭部資訊以及組織結構也有區別,具體可以參閱《AAC幀格式及編碼介紹》
AAC的編解碼庫
Libfdk_AAC >
ffmpeg AAC >
libfaac >
libvo_aacenc
其中最常用的是Libfdk_AAC
AAC檔案處理流程
1. 判斷檔案格式,確定為ADIF或ADTS。
2. 若為ADIF,解ADIF頭資訊,跳至第6步。
3. 若為ADTS,尋找同步頭。
4. 解ADTS幀頭資訊。
5. 若有錯誤檢測,進行錯誤檢測。
6. 解塊資訊。
7. 解元素資訊。