iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 3
1

黑色好看版 - 傳送門


https://ithelp.ithome.com.tw/upload/images/20181018/20089358qgfibN81xg.png
圖片來源 : 馬克

正文開始

在上一篇文章中,在咱們理解了麥克風幫我們將聲音進行採集,並且透過 PCM 方法轉化成電腦看的懂的東東後,接下來咱們要來學習以下主題 :

聲音的編碼與壓縮

這篇文章中咱們會先說明一下編碼是什麼東西,然後接下來要理解編碼與壓縮的關係,最後咱們在來介紹一些現在在即時音頻通訊中比較常見的幾個編碼。

  • 什麼是聲音的編碼 ?
  • 那為啥會有這麼多種編碼 ?
  • 要如何將聲音所花費的空間變小呢 ?
  • 各種聲音的編碼。

什麼是聲音的編碼 ?


一段用來描述聲音的有規則二進位

上一篇文章中咱們有提到使用 PCM 來將聲音進行數位化,將聲音變成所為的二進位,也就是大概長的如下面這樣,這個 1 與 0 是有規則的,而正常來說這就咱們所謂的編碼

10101010010101010100000000111111 ……

而最開始用 PCM 所產生出來的東西,咱們也稱為 PCM 編碼,順到一提它又被稱為無損編碼,但不是指它能完美無損的描敘真實聲音,而是無限接近真實的聲音。

那為啥會有這麼多種編碼 ?


因為用 PCM 所產生出來的 raw data 太大囉,所以某些神人就幹了一些壓縮編碼

有點兒年紀的人們 ( ex. 馬克 ) 年輕時應該都有用過 MP3 這東東,它裡面裝的就是用 MP3 編碼後的音樂,然後現在常聽到的 AAC 和 Opus 也都是音頻編碼的東東,那為啥會怎麼多種編碼呢 ? 那是因為 raw data 太大了(如下範例),不適合所有場景,像以前的 MP3 播放器空間小小的( 128 MB ? 記憶中),如果直接放 raw data 那大概只能放 2 ~ 3 首歌吧,你覺得這樣能賣嗎 ?

範例 : 

採樣率: 44.1 KHz 
採樣大小: 16 bit
聲道: 2

位元率 = 44100 * 16 * 2 = 1,411,200 bps = 1,411.2 kbps = 176 KB/s
3 分鐘 PCM 編碼大小 =  176 * 60 * 3 = 30,560 KB = 30 MB

因為上面所計算出來的所需空間太大囉,所以就有能開始研究如何儘可能讓它變小而不影響到音質,這方面也被稱為音頻的壓縮

備註

.mp3 不是編碼記好,它只是裝了 MP3 編碼的容器,這之後會詳細說。

要如何將聲音所花費的空間變小呢 ?


用一些方法就編碼壓縮

那要如何讓聲音變小呢 ? 基本上有兩條簡單的思路。

無損壓縮

首先第一條就是將二進位以不同的標示法來進行編碼,假設咱們有個聲音二進位如下 :

1111111110000

那事實上咱們就可以根據 0 與 1 的數量,轉換成如下的格式,就是 9 個 1 與 4 個 0 這樣,這樣事實上就可以省了不少空間了,而這種類型的方法被稱為無損壓縮,因為它還可以還原成原來的編碼。

9140

有損壓縮

而第二條思路就是將不需要的東西給砍掉,人類的小耳朵事實上沒這麼靈敏,並不是所有的聲音都聽的到,所以某一些編碼會針對這個部份進行處理,儘可能的達到在人耳沒注意到的情況下,將聲音進行壓縮,這種類型的方法被稱為有損壓縮

各種聲音的編碼


接下來咱們就簡單的介紹一下目前比較常見的聲音編碼,不過這裡就只是很粗淺的介紹一下,因為真的要深入說明,請各位友人直接去買本書來看吧 ……. 這真的超難的。

G.711 ( 始祖 )

  • 採樣率: 8 KHz
  • 採樣大小: 8 bit
  • 位元率: 64 kbps
  • 無損編碼

最原始的語音編碼始祖,基本上他就是 PCM 編碼,只是在一些參數上有進行設定,主要採集率與採樣大小參數如下,這種標準主要用於電話上。

MP3 ( MPEG-1 audio layer 3 )

  • 位元率: 8 ~ 320 kbps (但典型都用為 128 ~ 320 kbps)
  • 有損編碼
  • 壓縮率約為 1:12

這東東是最早在網路上流行的音頻編碼格式,想當年一堆潮潮的 MP3 裝置,而其中 MP3 就是指支援 MP3 音訊編碼。

它當初被設計出來的目的就是希望降低容量,它的方法就是將人的小耳朵聽不到的 PCM 音頻資料給移除 (透過心理聲學),來達成高壓縮比例,而對大多數的人類聽覺感受而言 MP3 與原使未壓縮的音質並沒有太大的影響,感覺都是一樣的。這也使得 MP3 在我年輕那個時代非常的普及啊。但現在慢慢的快被人遺忘囉。

在位元率方面,它主要提供了多種的選項,比較典型約為 128 ~ 320 kbps 之間,網路上常看到說 128 kbps 音質近似於 CD 音質 (1411.2 kbps),當事實上那只是在低端的揚聲器上聽不出來,在較高大尚的地方就聽的出來囉。

P.S 它專利在 2017 年 4 月到期

AAC ( Advanced Audio Coding )

  • 位元率: 8 ~ 529 kbps (通常用為 64 kbps)
  • 有損編碼
  • 壓縮率約為 1:18

它是屬於 MPEG-2 與 MPEG-4 規範的一部份,整體而言 AAC 是為了作為 MP3 的後繼者而被設計出來的,在相同的位元率下,AAC 的音質優於 MP3,而且它也提供更高的採樣率與位元率。其中目前 apple 的 iTunes 就是 ACC 的最大支持者,而且現在也很多影音網站在音頻方面也都是改用 AAC 編碼囉 (Ex. Youtube)。

P.S AAC 編解碼器的所有製造商或開發商都需要專利許可。

Opus

  • 位元率: 6 ~ 510 kbps (通常用為 64 kbps)
  • 有損編碼
  • 壓縮率約為 1:18

它是一個有損的語音編碼,目標是希望適用於低延遲的網路環境,Opus具有非常低的演算法延遲,所以它非常的適合網路上的即時語音、視訊會議、遊戲內聊天等領域。

順到說一下,它又被稱為編碼瑞士刀,他幾乎可以提供所有位元率 ( 6 kbps ~ 510 kps),而且在更高位元下有比 AAC 更優的音質,並且有極低的演算法延遲,所以這也使得它很適合用在聊天領域上。

P.S 它是免費的。

https://ithelp.ithome.com.tw/upload/images/20181018/20089358M1uMVqTINi.jpg
圖片來源 : wiki

https://ithelp.ithome.com.tw/upload/images/20181018/20089358TqNpWPzNxH.png
圖片來源 : wiki

FLAC ( Free Lossless Audio Codec )

FLAC 最大的特點就是無失真壓縮,不同於上面提到的 MP3、AAC 它不會失真,他就有點像是咱們常用的 zip,壓縮完再解壓縮裡面的資料不會少啥。雖然說是無損,但問題是他的大小還是高於上面幾個有損編碼,這也為啥比較少在串流音樂上看到它兒 (P.S 目前只看到 SpotifyHi-Fi )。

備註: 它可流化 (之後在說)

各種編碼在不同系統的支援度

事實上還有非常多種語音編碼,但是通常不是專門研究音樂或聲音的我覺得不需要每個都知道,所以這裡我只有介紹一下目前在網路串流音樂或語音上比較常用的幾個編碼來說明。

然後這裡我就有點懶的做個比較表格,這裡我就將網路上的連結提供出來。

wiki 音訊編碼格式的比較

Android Support

OSX Support

結論


這篇文章中咱們總共學習了以下幾個重點 :

  • 什麼是聲音的編碼 ? 它就是用來描述聲音的有規則二進位。
  • 那為啥會有這麼多種編碼 ? 因為 raw data 太大了。
  • 要如何將聲音所花費的空間變小呢 ? 就是壓縮,可以分為有損與無損壓縮。
  • 各種聲音的編碼。

參考資料



上一篇
30-02之聲音的採集與原理
下一篇
30-04之影像的採集與原理
系列文
30天之即時網路影音開發攻略(小白本)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言