乾貨:遊戲語音SDK如何解決回聲消除難題

2021-01-16 騰訊網

[摘要]在這些開源項目之前,回聲消除技術是大廠的獨門武藝,其它團隊只能靠自己一點一滴地摸索積累。在這些開源項目之後,WebRTC和Speex提供開源的AEC模塊,成為業界不錯的教材。

在業界,回聲消除技術是公認難啃的硬骨頭。它本質上是一個複雜的數學問題的工程化。回聲消除技術做得比較好的產品有Tencent QQ和Microsoft Skype,以及即構科技Zego的遊戲語音SDK,開源的項目有WebRTC和Speex。在這些開源項目之前,回聲消除技術是大廠的獨門武藝,其它團隊只能靠自己一點一滴地摸索積累。在這些開源項目之後,WebRTC和Speex提供開源的AEC模塊,成為業界不錯的教材。

AEC的原理

回聲消除的原理在眾多文章中都有介紹,這裡只簡單介紹筆者在即構科技Zego遊戲語音SDK中的實踐。簡單地來說,遠端的聲音信號首先通過揚聲器播放出來,然後在房間中經過多個傳播和反射路徑,最後和近端的聲音一起被麥克風採集進去。如果沒有做回聲消除處理,那麼遠端就會把重新採集進去的遠端聲音信號播放出來,而且和原始的遠端聲音有一定的延遲時間。這就是回聲產生的原理。

要消除回聲,其實真的很難。這有點像把紅墨水倒進藍墨水裡,混合在一起,然後要求把紅墨水從藍墨水中分離出來。對於採集端來說,無論是近端的聲音,還是揚聲器播放出來的聲音,都是從空氣中無差別地採集到的聲音。對機器來說,遠端信號播放出來的聲音和近端的聲音是沒有任何區別的,就像對水來說紅墨水和藍墨水沒有區別一樣。回聲消除的工作就是要把沒有任何區別的遠端回聲和近端聲音分離。這項工作其實比想像中要難得多。

幸運的是,我們並非沒有任何辦法可以找到遠端回聲和近端聲音的邊界。遠端的聲音信號和回聲是相關的。也許有朋友會一拍腦袋恍然大悟地說:那就直接把遠端聲音從採集到的聲音中減掉就可以了。然而事情並沒有那麼簡單。遠端的聲音信號並非等同於回聲。遠端的聲音從揚聲器播放出來,到被採集端採集,經歷過揚聲器-房間-麥克風(Loudspeaker-Room-Microphone,LRM)這樣的回聲饋路。在LRM回聲饋路中傳播的時候,遠端聲音一方面經過多次反射,另外一方面經過多次疊加,最後變得和遠端聲音信號有差別了。我們把這個差別用一個函數來表示:

fe=f(fs)

fs=far-end signal(遠端信號);fe=far-end echo (遠端回聲);

如果能夠對這個函數求解,那麼就可以根據遠端聲音信號和遠端回聲之間的相關性進行建模。這個模型是對回聲饋路LRM的模擬,會高度逼近回聲饋路LRM。等到這個模型穩定時,輸入遠端聲音信號fs,就可以輸出高度接近遠端回聲的信號fe。通過濾波器生成反相的信號,和採集到的聲音信號進行疊加,就可以把回聲信號消除掉。這就是回聲消除AEC的基本原理。這個函數求出來的解不大可能和遠端回聲完全一致,只能高度逼近。該函數求出來的解和遠端回聲越逼近,回聲消除的效果就越好。

靜音、單講和雙講

雖然遊戲語音SDK中實時語音的通話是雙工模式,但是可以分為不同的情形:靜音、單講和雙講。針對不同的情形要採取不同的回聲消除策略。

1)靜音

沒有人說話的情形。在語音段才需要做回聲消除。在非語音段不會有回聲,不需要做回聲消除,甚至不需要發送語音信息,從而可以降低碼率,節約帶寬成本。因此,準確探測語音活動十分重要。語音的探測算法叫VAD(Voice Activity Detection)。不同的廠商有不同的VAD實現方法。即構科技是利用基音周期實現VAD,有效地提高VAD判斷的準確性,避免將非語音段誤判為語音段。

2)單講

只有遠端說話的情形。由於只有遠端說話,從麥克風採集進來的語音信號只包含遠端的回聲,而不包含近端的語音。單講情形下的回聲消除相對比較容易處理,可以採取比較激進的處理策略。如果確定單講是高概率事件的情況下,可以直接地把所有語音信號都幹掉,然後適當地填充舒適噪音。一般來說,在單講情形下,用線性自適應濾波器跟蹤回聲饋路,可以很好地消除回聲,大概能夠抑制掉18dB的回聲。

3)雙講

有多方同時說話的情形。由於有多方同時說話,從麥克風採集進來的語音信號就包含了遠端的回聲和近端的語音,兩者混合在一起。雙講情形下的回聲消除就十分困難:一方面要保護近端的語音信號不被損傷,另外一方面還要儘量地把回聲消除乾淨。這裡不但有「紅墨水藍墨水分離」的難題,而且還有「投鼠忌器」的困境。一般來說,在遠端回聲比近端語音要高大概6dB~8dB的情況下,如果要把遠端回聲消除乾淨,那麼肯定會或多或少地損傷到近端語音。另外,如果遠端回聲比近端語音要高出18dB以上,比如說揚聲器離麥克風太近,遠端回聲把近端語音完全掩蓋掉了,那麼回聲消除的效果肯定是不好的。這種情形下,可以採取比較激進的策略,把遠端回聲和近端語音一起幹掉,然後適當地填充舒適噪音。

因此,回聲消除模塊要有能力區分這三種情形,才能針對各種情形採取不同的算法。通過VAD可以區分非語音段和語音段。如何區分單講和雙講的方法將在下面討論。

AEC的實現

遊戲語音SDK的回聲消除主要包含兩個步驟:線性自適應濾波和非線性處理。線性自適應濾波就是對fe=f(fs)求解,建立遠端回聲的語音模型,進行第一輪迴聲消除。非線性處理又分為兩個步驟:殘留回聲處理和非線性剪切處理。殘留回聲處理進行第二輪迴聲消除,處理殘留回聲;非線性剪切處理就是對衰減量達到閾值的語音信號進行比較激進的剪切處理。

線性自適應濾波和非線性剪切處理在學術論文和開源項目中能找到東西學習。殘留回聲處理就很難,一般都是要靠團隊自行摸索、積累和創新。正是因為如此,語音技術的門檻才如此的高。

回聲消除的原理與實現

線性自適應濾波

以遠端聲音信號和遠端回聲的相關性為基礎,建立遠端回聲的語音模型,利用它對遠端回聲進行估計,目的是獲得對遠端回聲儘量逼近的估計。我們可以把回聲饋路LRM看作一個「環境濾波器」。經過它的處理,遠端聲音信號被變成遠端回聲。回聲消除就是要構建一個「算法濾波器」,基於對遠端回聲的語音模型,不斷地調整該濾波器的係數,使得估計值更加逼近真實的回聲。估計值越逼近真實回聲,回聲消除效果就越好。

自適應濾波器收斂後得到的就是需要求解的回聲饋路函數fe=f(fs)。當濾波器收斂穩定之後,輸入遠端聲音信號fs,就可以輸出相對準確的對遠端回聲信號的估計值fe。把採集到的信號減去遠端回聲信號的估計值fe,就得到實際要發送的語音信號。

實現線性自適應濾波器有兩個難點:

1)快速收斂

在收斂階段,採集到聲音信號要求只有遠端的回聲信號,不能混有近端的語音信號。近端的語音信號和遠端的參考語音信號沒有相關性,會對自適應濾波器的收斂過程造成擾亂。因此,即構科技的策略是讓自適應濾波器收斂的時間儘量地短,短到收斂過程的時間段裡採集進來的信號只有遠端的回聲信號,這樣自適應濾波器收斂的效果就會很好。在收斂好之後,濾波器就穩定下來了,就可以用來過濾遠端的回聲信號了。

2)動態自適應

在收斂好穩定下來以後,自適應濾波器還要隨時自動適應回聲饋路的變化。自適應濾波器要能夠判斷回聲饋路是否發生變化,並且能夠重新學習和對其進行建模,不斷地調整該濾波器的係數,進入一個新的收斂過程,最後快速地逼近新的回聲饋路。這種情況在手遊的場景中是十分常見的,用戶拿著手機邊走邊玩遊戲,遊戲語音周遭的回聲饋路時刻發生著變化,自適應濾波器就要時刻自動重新收斂來適應新的回聲饋路。

這兩個難點是一對矛盾的特徵,要求自適應濾波器一方面要能夠快速收斂後保持係數高度穩定,另外一方面要能夠隨時保持更新狀態跟蹤回聲饋路的變化。

非線性處理

1)殘留回聲處理

通過自適應濾波器來消除回聲,並不能百分之一百把回聲消除乾淨,還需要進一步消除殘留的回聲。

一般來說,殘留回聲消除的策略是利用自適應濾波器處理後的殘留回聲與遠端參考語音信號的相關性,進一步消除殘留回聲。相關性越大,說明殘留回聲越多,需要對殘留回聲進一步消除的程度越大;反之,相關性越小,說明殘留回聲較少,需要對殘留回聲進一步消除的程度越小。因此,首先要通過計算殘留回聲與參考信號的相關矩陣,得到一個反映消除程度的衰減因子;然後將殘留回聲乘以衰減因子,從而進一步消除殘留回聲。

在線性自適應濾波做完了以後,可以利用殘留回聲和麥克風採集到的遠端回聲信號的相關性來檢測是處於單講還是雙講狀態。根據單講還是雙講狀態,可以進一步調整衰減因子。

如果處於遠端單講狀態,因為近端沒有聲音信號(沒人說話),可以儘量多地抑制回聲,讓衰減因子儘量地小;如果處於雙講狀態,因為線性自適應濾波器是在儘量不損傷近端語音音質的前提下消除回聲,回聲抑制量不會太大,所以衰減因子相對較大。

消除殘留回聲的算法難度甚高。在論文或者開源項目中甚少有可參考的東西,各家廠商都是通過私有的算法來實現的,甚至很多廠商都選擇不實現。

2)非線性剪切處理

在完成了上述處理以後,其實剩下的回聲一般都比較小了,但不排除仍有一些殘留的可以感知的小回聲。為了進一步消除這些小回聲,要根據前面處理得到的衰減量來做進一步的抑制處理。

在這裡要為衰減量設定一個閾值。一般來說,這個衰減量閾值要設定得比較保守(比較高)。

如果衰減量達到或者超過設定的閾值,就表明回聲消除量比較大,採集進來的語音信號很可能全部都是回聲信號,那麼就直接將語音信號全部消除掉,並填充舒適噪聲,防止聲音聽感起伏。能達到那麼大的衰減量,一般是處於遠端單講狀態,或者遠端回聲信號要遠遠大於近端語音信號的雙講狀態。正常的雙講狀態下,為了保護近端語音的音質,自適應濾波器是不會做大幅的回聲消除的。因此,只要衰減量達到或者超過設定閾值,把採集到的語音信號全部消除掉是不會影響正常聽音效果的。

如果衰減量沒有超過設定的閾值,那麼就不要進一步做回聲消除了。這種情形可能是雙講狀態,要保護本地語音的音質,避免本地語音被當成回聲誤殺。業界一般有兩種做法:一種是允許對近端聲音有些許損傷也要把遠端回聲消除乾淨,另外一種是允許保留些許遠端回聲也不要對近端聲音造成損傷。如果過分消除回聲,就會造成斷續的聽音感覺。回聲消除就是要在這兩種做法之間找平衡點。

筆者在即構科技Zego的實踐表明,在遊戲實時語音SDK中,回聲消除是客戶高度關注的一個技術特徵。與此同時,回聲消除也是遊戲語音SDK中最有難度的技術,沒有之一。即使是王者榮耀這種頂級遊戲,也十分重視回聲消除的效果。在以用戶體驗為生命線的遊戲行業,特別在手遊做得越來越重的今天,回聲消除技術做得好不好,往往決定了用戶是否繼續玩你的遊戲。

相關焦點

  • 基於FM2010晶片的回聲消除裝置的設計應用
    目前,QQ視頻、語音通信已經成為既省錢又方便的交流方式,但是,利用網際網路傳輸語音數據雖然提高了資源的利用率,同時也存在一些弊端,比如語音質量差。造成這種問題的因素有很多,其中最主要的是網絡問題和回聲問題。
  • 基於LMS算法的回聲消除系統仿真研究
    編者按:在通信行業日漸發達的今天,回聲消除的應用十分廣泛。常見的回聲消除方法一般有三種。一是對周圍環境進行特殊的處理,二是採用回聲隔離器,三是採用回聲抵消器。當下最熱門的三種回聲消除算法分別是維納濾波算法,最陡下降算法,LMS算法。
  • 太空狼人殺火爆的背後 實時遊戲語音有哪些技術難點
    聲網擁有全球領先的實時遊戲語音解決方案,通過在遊戲內接入實時音視頻,增加玩家沉浸感、社交感,《狼人殺》、《飯局狼人殺》、《Mobile Legends: Bang Bang》、《Yalla Ludo》等國內外知名的遊戲均採用了聲網的實時遊戲語音解決方案,同時聲網還與遊戲引擎商Cocos、Unity 深度整合,Agora 音視頻SDK 已經上線 Unity asset store ,併集成於
  • Unity3D遊戲語音功能如何實現
    Unity3D是美國Unity Technologies公司開發的一個全面整合的專業遊戲引擎,像我們日常所熟知的《王者榮耀》、《絕地求生》等遊戲都是應用它來開發的,它可以廣泛應用於手遊、網遊、單機以及新的VR遊戲等開發領域,那它的遊戲語音功能是如何實現的?
  • 「吃雞」手遊上演絕地求生,遊密語音助力遊戲廠商殺出重圍
    現在看來,直播對遊戲的宣傳和推廣的效果,幾乎是指數級上升,對「吃雞」類手遊當然也不例外。但關鍵是,對於遊戲開發商來說,想要在這「吃雞」熱潮中分一杯羹,除了遊戲核心玩法的開發,IP的本土化也是一個頭疼的問題,似乎已無暇顧及遊戲內置的語音與直播這兩大功能,而這兩大功能對於現今「吃雞」類手遊的重要性不言而喻。
  • 語音社交新時代:語音社交APP源碼需要解決的難點問題
    隨著遊戲、動漫等的火熱,以及AI、5G技術的發展,以音視頻、遊戲為主導的多場景社交產品逐漸成為熱點。網易巨頭「聲波」的入局,意味著傳統的社交應用正在向多場景社交應用轉型,多場景社交將為平臺商業變現提供更多可能,或將成為下一增長點。
  • ZLG深度解析:語音識別技術
    語音識別已成為人與機器通過自然語言交互重要方式之一,本文將從語音識別的原理以及語音識別算法的角度出發為大家介紹語音識別的方案及詳細設計過程。語言作為人類的一種基本交流方式,在數千年歷史中得到持續傳承。近年來,語音識別技術的不斷成熟,已廣泛應用於我們的生活當中。語音識別技術是如何讓機器「聽懂」人類語言?
  • 智能音箱大戰全面開火,那麼問題來了:如何成為一名全棧語音識別...
    信號處理: 包括語音增強、噪聲抑制、回聲抵消、混響抑制、波束形成、聲源定位、聲源分離、聲源追蹤等。具體如下:語音增強: 這裡是狹義定義,指自動增益或者陣列增益,主要是解決拾音距離的問題,自動增益一般會增加所有信號能量,而語音增強只增加有效語音信號的能量。
  • 人工智慧電視遠場語音設計
    摘要:本文介紹一種服務於人工智慧電視,實現遠場語音應用的麥克風陣列設計方案,闡述系統框架和硬體設計,同時介紹軟體設計的部分要點。通過麥克風陣列,協助語音增強算法的實現,達到遠距離拾音、回聲消除、聲源定位,滿足當前智能語音應用的需求。
  • 創意回聲冒險遊戲PS4/PSVR《Stifled》18年發售
    索尼互動娛樂今天宣布,一款利用「回聲」來探索冒險的驚悚遊戲《Stifled》將於2018年內登陸PS4,並將支持PSVR。·《Stifled》是一款回聲探路恐怖遊戲,遊戲的玩法有些類似回聲探路,玩家需要通過各種物品發出聲響,並利用回聲來確定周圍的環境,但是相對應的,玩家在探路時發出的聲響也會被敵人察覺到,所以需要玩家平衡好如何利用聲音。同時,玩家還被允許使用一些物品,對未知的環境進行探索。
  • 回聲定位,盲人也會!
    (圖片來源:scifigeneration.tv)最新研究表明,視覺障礙者可以像蝙蝠和海豚那樣利用回聲定位物體。這項發表在最新一期的《聽力研究》(Hearing Research)雜誌上的研究,揭示了失明和近視的人如何藉助聲音、尤其是回聲導航並獲得空間感,還探討了聽覺障礙對回聲定位的影響,以及如何優化回聲定位能力以幫助有視覺障礙的人獨立生活、提高他們的生活質量。
  • 光環4遊戲報錯怎麼解決?遊戲報錯解決方法
    不過由於平臺移植,很多玩家在剛開始遊玩就遇到了遊戲報錯進不去的問題。接下來就讓GoLink免費加速器帶玩家們看看《光環4》遊戲報錯如何解決吧:Fate Error錯誤玩家遇到這個錯誤提示的原因是文件路徑中有中文,把文件路徑修改成純英文後再啟動遊戲即可。
  • 手機語音翻譯如何操作?中文語音翻譯成英文的簡單方法
    那麼如何利用手機完成中文在線語音翻譯成英文呢?今天小編將要分享給大家兩個方法,幫你解決語音翻譯難題。一:手機語音助手現在的手機都有語音助手功能,比如蘋果手機的Siri、小米手機的小愛同學等,同樣它們也能變成語音翻譯工具。
  • IMERAI將超聲波回聲定位傳感器與AI相結合來了解周圍的物理世界
    正是在那裡,他開發了一種非基於攝像頭的傳感器,可以在語音激活的智能家居助手中添加視覺元素,而不會侵犯其用戶的隱私。 蝙蝠狀傳感器是如何工作的? 該裝置的工作原理是將超聲波從物體上反射出去,檢測物體的相對距離和位置。然後人工智慧處理這些數據,並創建一個環境的詳細圖像。 Bowen解釋說:「和人類面臨的許多問題一樣,大自然也有解決辦法。
  • 語音識別技術簡史
    遠場語音識別技術主要解決真實場景下舒適距離內人機任務對話和服務的問題,是 2015 年以後開始興起的技術。由於遠場語音識別解決了複雜環境下的識別問題,在智能家居、智能汽車、智能會議、智能安防等實際場景中獲得了廣泛應用。目前國內遠場語音識別的技術框架以前端信號處理和後端語音識別為主,前端利用麥克風陣列做去混響、波束形成等信號處理,以讓語音更清晰,然後送入後端的語音識別引擎進行識別。
  • 《侏羅紀世界進化》更換遊戲內語音方法 語音怎麼換
    導 讀《侏羅紀世界進化》的玩家在玩到遊戲後最大的問題並不是BUG之類,而是遊戲內語音是中文,想要換成英文,那麼要如何操作呢?
  • 語音識別的痛點在哪,從交互到精準識別如何做? | 雷鋒網公開課
    那麼實現人機互動需要解決哪些問題?這其中的關鍵技術有哪些?人機互動的未來趨勢如何?本期硬創公開課邀請了科大訊飛的研發主管趙豔軍為大家答疑解惑。只有明確說話人的方位後,才可以定向的拾音,做降噪處理,同時對說話人進行語音增強。這個聲源定位和語音增強主要是用麥克風陣列的相關技術,下面會有詳細解釋。在語音識別這個重要模塊中,首先要解決的就是遠場識別,通過上面提到的麥克風陣列和聲源定位,可以較好的實現遠距離拾音,解決噪聲、混響、回聲帶來的影響。
  • 回聲探路
    回聲探路是一款非常有創意的迷宮冒險遊戲。 在遊戲中玩家將探索黑暗的迷宮。 您需要通過腳步聲來判斷周圍的環境。 如果聲音的波紋不是很準確,您也可以大力抬腳,提防紅色敵人,一旦遇到它們,您只能逃跑直到到達盡頭。
  • 百度大腦遠場語音開發套件評測—快速上手,超讚語音交互體驗
    這次,有幸收到百度遠場語音開發套件的測評邀請,作為一個非測試專業人員,這裡我就自己的百度遠場語音開發套件使用過程及在使用過程中遇到的問題和大家分享一下,如有錯誤,請多多指教。、喇叭以及符合聲學要求的腔體, 支持聲源定位、噪聲消除等信號處理算法,5 米內有效拾音,支持遠場喚醒、遠場識別、語音合成能 力,使語音開發評估更簡便、更高效。
  • 樂鑫發布 AI 語音麥克風陣列開發板 ESP32-Korvo
    這是一款針對物聯網嵌入式設備的 AI 語音開發板,基於樂鑫的旗艦晶片 ESP32,搭載多麥克風陣列,能夠實現高性能、低功耗的遠場語音喚醒和命令詞識別功能。本文引用地址:http://www.eepw.com.cn/article/202004/411927.htm近年來,隨著人工智慧和物聯網的興起,語音逐漸成為我們與智能設備交互的一種典型方式。