低延時、高音質語音通話背後的音頻技術解析——編解碼原理

語音社交已經出現了數十年,前不久的「互動播客」場景讓音頻互動再次成爲業界焦點。但咱們想聊的不是這個場景,而是底層那套匯聚了工程師們數十年經驗的實時音頻互動技術算法

從軟件算法到傳輸架構,有哪些因素會影響你的通話音質?爲何說不是延時越低越好?機器學習、大數據如何幫助優化傳輸、音質?咱們將從今天開始經過四篇音頻技術系列內容,從多個層面深刻淺出逐一解答這些問題,並分享聲網的實踐經驗。微信

咱們曾在《詳解低延時》中講過這樣一個音視頻數據傳輸的流程,以下圖。在這條端到端的鏈路上的每一個環節,都存在影響延時、音質的技術難點。markdown

音視頻端到端傳輸流程

接下來四篇內容會從編解碼、降噪與回聲消除算法、網絡傳輸、音質優化幾方面,由淺入深地講講高音質、低延時背後的技術原理與「改造」思路。網絡

本篇先來說一下語音編解碼器。不過在講語音編解碼器以前,咱們須要先了解音頻編解碼的原理,才能更快地理解究竟是什麼在影響着音質體驗。架構

語音編碼與音樂編碼

這裏先給一些不瞭解編解碼原理、做用的工程師,簡短介紹下。框架

音頻編碼指的是把音頻信號轉化爲數字碼流的過程(以下圖所示)。在這個過程當中,音頻信號會被分析從而產生特定參數。隨後,這些參數會按照必定規則寫入比特流。這個比特流也就是咱們常說的碼流。解碼端接收到碼流後,會按照約定好的規則將碼流還原爲參數,再使用這些參數構建出音頻信號。機器學習

音頻編解碼原理

音頻編解碼器的發展歷史很是悠久,早期編解碼器的核心算法是非線性量化,這是一種如今看來比較簡單的算法,其壓縮效率並不算高,但適用於包括語音和音樂在內的絕大多數音頻類型。以後,隨着技術的發展和編解碼分工的細化,編解碼器的演進方向分紅了兩條路——語音編碼器和音樂編碼器。oop

主要用來編碼語音信號的語音編解碼器,開始逐漸向基於時域線性預測框架的方向演化。這種編解碼器參考了聲道的發音特性,將語音信號分解爲主要的線性預測係數和次要的殘差信號。線性預測係數編碼所需的比特率很是少,卻能高效的構建出語音信號的「骨骼」(能夠想象爲能聽出這段語音大體在說話但聽不出是誰在說);殘差信號則像是「血肉」,可以補充出語音信號的細節(有了血肉,則能夠想象爲你能夠聽出這段語音是誰在說話了)。這種設計大幅提高了語音信號的壓縮效率,可是這種基於時域的線性預測框架在有限複雜度下沒法很好的編碼音樂信號。性能

而針對音樂信號進行編碼的音樂編解碼器則走上了另外一條演化的道路。由於相比時域信號,頻域信號的信息更多的集中在少部分頻點上,更利於編碼器對其進行分析和壓縮。因此音樂編解碼器基本都會選擇對在頻域上對信號進行編碼。學習

後來,隨着技術日趨成熟,兩種編解碼架構又再次走到了一塊兒,即語音音樂混合編碼器,WebRTC 中默認使用的編解碼器 Opus 就是這類編解碼器。這類編解碼器的特色是融合了兩種編碼框架,並針對信號類型自動切換合適的編碼框架。一些國內外知名的產品都會用到 Opus ,好比 Discord。

語音編碼中,什麼在影響互動體驗?

要評價音質,那麼咱們就須要先知道編解碼器的一些技術指標。技術指標通常有采樣率、碼率、複雜度、抗丟包能力等,那這些技術指標分別表明什麼,對音頻體驗的影響又是怎樣的呢?

你可能看到過「採樣率越高,音質越好」、「編碼複雜度越高越好」的說法,但放在實時互動的場景下事實並不是如此!

1、採樣率

從人耳能夠聽到的模擬信號,轉化到計算機能夠處理的數字信號,須要一個採樣的過程。聲音能夠被分解爲不一樣頻率不一樣強度正弦波的疊加。採樣能夠想象成在聲波上採集了一個點。而採樣率指的就是在這個過程當中每秒採樣的點數,採樣率越高,表示在這個轉化過程損失的信息越少,也就是越接近原聲。

高、低採樣率的差異示意圖

採樣率決定了音頻信號的分辨率。在人耳可感知範圍內,採樣率越高,高頻份量就被保留的越多,這段信號的聽感就越清晰明亮。舉個例子,咱們打傳統電話時,每每會感受對方的聲音比較沉悶,這是由於傳統電話的採樣率是 8kHz,只保留了能保證可懂度的低頻信息,不少高頻的份量被丟失了。因此想要音頻互動體驗越好,就須要在人耳可感知範圍內儘可能提升採樣率。

2、碼率

通過採樣,聲音從模擬信號轉化爲數字信號。碼率表示的就是這個數字信號在單位時間內的數據量。

碼率決定了音頻信號通過編解碼後的細節還原度。編解碼器會把給定的碼率按優先級分配給各個分析模塊輸出的參數。在編碼碼率有限的狀況下,編解碼器會優先保證對語音質量影響較大的參數進行編碼,而放棄編碼一些影響較小的參數。這樣在解碼端,由於使用的參數並不完整,因此其構建出的語音信號也會有難以免的損傷。通常來講,同一款編解碼器的碼率越高,其編解碼後的損傷就越小。但碼率並非越高越好,一方面,碼率和編解碼質量並非線性關係,在超過「質量甜點」後,碼率升高對質量的提高開始變得不明顯;另外一方面,在實時互動中,碼率太高可能擠佔帶寬產生網絡擁塞,從而引起丟包,反過來破壞了用戶體驗。

質量甜點:在視頻領域,質量甜點指的是在既定的碼率和屏幕大小下經過設定合理的分辨率和帖速率來獲得最佳視頻主觀質量體驗。在音頻領域也有相似的狀況。

3、編碼複雜度

編碼複雜度通常集中在編碼端信號分析模塊。通常來講,對語音信號分析的越詳盡,其潛在壓縮率可能就越高,因此編碼效率和複雜度有必定相關性。一樣的,編碼複雜度和編解碼質量亦不是線性關係,二者之間也存在一個「質量甜點」,可否在有限複雜度的前提下設計出高質量的編解碼算法每每直接影響了編解碼器的可用性。

4、抗丟包能力

首先,抗丟包的原理是什麼?咱們在傳輸音頻數據的時候會遇到丟包,若是當前數據包丟失了,咱們但願能夠經過某種手段來猜出來或者獲得當前幀大概的信息,而後利用這些不徹底準確的信息,解碼出一個和原始信號相近的語音幀。固然,只靠憑空猜通常是沒什麼好結果的,若是前一個數據包或者後一個數據包能告訴解碼器當前丟失包的一些關鍵信息就行了,這個信息越多,越有利於解碼端恢復出丟失的語音幀。這些包含在「前一個數據包」或「後一個數據包」中的「關鍵信息」,也就是咱們以後要提到的「幀間冗餘信息」。(往期咱們講過丟包對抗的更多知識)

因此,抗丟包能力和編碼效率是相對互斥的,編碼效率的提高每每須要儘可能減小幀間的信息冗餘,而抗丟包能力又依賴必定的幀間信息冗餘,幀間信息冗餘能夠保證在當前數據包丟失時,經過前/後序語音幀恢復出當前語音幀。在實時互動場景下,由於用戶的網絡是非可靠網絡,可能一個用戶走着走着就進了電梯,或坐在高速行駛的車上。在這種網絡裏,充斥着丟包與延時抖動,因此編解碼抗丟包能力又是不可或缺的。所以,如何平衡編碼效率和抗丟包能力,也須要通過詳盡的算法設計和打磨驗證。

如何平衡音頻體驗與技術指標?

那聲網是怎麼作的呢?咱們的工程師綜合考慮了上述幾點,打造了一款專爲實時通信使用的高清語音編解碼器 Agora Nova(如下簡稱 Nova)。

32kHz 採樣率

首先在採樣率上的選擇,Nova 並無選擇其餘語音編解碼器使用的8khz採樣率或16khz採樣率,而是選擇了更高的 32kHz 採樣率。這意味着 Nova 首先在通話音質的起跑線上就取得了較大的領先優點。雖然業內經常使用的 16kHz 採樣率(備註:微信用的就是 16kHz)已經知足了語音可懂度的基本需求,但部分語音細節仍然須要更高的採樣率才能捕捉到,咱們但願提供更高清的語音通話能力,即既保證了可懂度,又提高了清晰度,這也是咱們選擇 32kHz 的緣由。

優化編碼複雜度

採樣率越高,語音清晰度就越高,同時意味着單位時間內須要分析/編碼/傳輸的採樣點就越多,編碼碼率和複雜度都須要相應地增長。編碼碼率和複雜度的增長勢必會給用戶的帶寬和設備性能功耗帶來壓力。但這不是咱們想看到的。爲此,咱們通過理論推導和大量實驗驗證,設計了一套精簡的語音高頻份量編碼系統,在分析複雜度增長很小前提下,最低使用 0.8kbps 便可實現高頻信號的編碼(基於不一樣技術,以往要表達高頻信號,碼率通常須要高於1~2kbps),極大增長了語音信號的清晰度。

平衡抗丟包性能與編碼效率

在抗丟包能力的保障上,咱們也在保證編碼效率的前提下選擇了最平衡的方案,通過實驗驗證,這種方案即又保證了編碼壓縮效率,又保證了丟包時的恢復率。此外,除了 Nova,針對不穩定的網絡環境,咱們還研發並開源了抗丟包能力更強的語音編解碼器Agora Solo 和語音音樂混合編解碼器 SoloX 等。

Agora Nova vs. Opus

Nova 有着豐富的模式選擇以供不一樣場景選擇,諸如可適應模式、高品質模式、低能耗高品質模式、超高頻模式和超低比特率模式等。

若是把 Nova 和先進的開源編解碼器 Opus 作對比,得益於 Nova 高效的信號處理算法,其在通用語音編碼碼率下,有效頻譜信息要比同等碼率下的 Opus 多 30%。在主、客觀評價體系下,Nova 的語音編碼質量高於 Opus:

  • 客觀評價層面,使用 ITU-T P.863 標準定義的客觀質量評估算法對兩個編解碼器的編碼-解碼語料進行打分,Nova 得分始終比 Opus 略高一籌;

  • 主觀評價層面,通過 Nova 編解碼的語音信號的還原度要高於通過 Opus 編解碼的語音信號,反映在聽感上就是更通透,量化噪音更小。

得益於這款高清的語音編解碼器,聲網Agora SDK 爲全球用戶提供了一致的高質量音頻互動體驗。其實一段語音通話體驗的好壞,除了直接與編解碼器的編碼質量關聯,也會極大地受到其餘模塊的影響,好比回聲消除、降噪、網絡傳輸等,咱們將在下一篇介紹聲網在回聲消除與降噪算法方面的最佳實踐。

想了解更多聲網技術,🔎歡迎搜索並關注「聲網 Agora 開發者」公衆號。

相關文章
相關標籤/搜索