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

2021-01-06 騰訊網

[摘要]在這些開源項目之前,回聲消除技術是大廠的獨門武藝,其它團隊只能靠自己一點一滴地摸索積累。在這些開源項目之後,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中最有難度的技術,沒有之一。即使是王者榮耀這種頂級遊戲,也十分重視回聲消除的效果。在以用戶體驗為生命線的遊戲行業,特別在手遊做得越來越重的今天,回聲消除技術做得好不好,往往決定了用戶是否繼續玩你的遊戲。

相關焦點

  • 非線性聲學回聲消除技術
    非線性的聲學回聲消除問題,在實際聲學系統裡面非常普遍也非常棘手,到目前為止還沒有特別有效的辦法來解決。目前介紹非線性聲學回聲消除的公開文獻也少之又少。華為雲專注音視頻行業20多年,是如何處理非線性聲學回聲消除的,效果又如何?華為雲音視頻專家範展,將從非線性聲學回聲消除產生的原因、研究現狀、技術難點出發,詳細介紹華為雲音視頻團隊推出的雙耦合的聲學回聲消除算法以及實驗檢驗結果。
  • 聊聊實時音視頻中的技術難點:回聲消除+噪聲消除
    開發包具有豐富的音視頻技術模塊,其中的語音部分就包含聲學回聲消除、噪音消除等等。容易理解,語音通話中,通常聲學回聲是在用戶打開了免提模式,即開啟揚聲器時產生的,不打開免提模式的情況下一般不需要啟用AEC。但是,有時候由於結構設計的問題,儘管沒有打開免提模式,聽筒上的聲音也可能作為回聲被麥克風採集到,此時也需要使用AEC。消除回聲就像把紅墨水倒進藍墨水裡,混合在一起,然後要求把紅墨水從藍墨水中分離出來,這存在著很大的技術難度。
  • Acoustic Technologies展示其噪音及回聲消除軟體
    Acoustic Technologies 和Tensilica今日宣布,Acoustic Technologies 的SoundClear移動語音2-MIC噪音及回聲消除軟體已經被移植至業界領先的音頻/語音DSP IP核--Tensilica HiFi
  • MorphVOX變聲器有回聲怎麼辦?回聲變音怎麼解決?
    有部分用戶在使用MorphVOX變聲的時候可能會遇到這樣的情況,跟對方語音通話的時候對方會聽到自己的聲音也被變聲了,這是什麼問題導致的呢?該怎麼解決這個回聲問題呢?下面就來說一說怎麼解決MorphVOX Pro有回聲的方法。
  • 華為便攜藍牙音箱Free GO正式上市 技術消除回聲
    為更好地滿足電話會議的通話需求,Free Go採用了來自聲加科技的回聲消除技術,實現360° 全方位、超強拾音,清晰傳達每一次精彩瞬間;3 米拾音範圍,輕鬆覆蓋 25 平米室內空間;採用雙麥克風密閉腔體設計,配合 AEC 自適應回聲抑制算法,有效抑制回聲;支持全雙工對講技術,讓語音交流如面對面般清晰順暢。
  • ...科技回聲消除技術,華為Free GO便攜藍牙音箱實現全雙工高清免提...
    憑藉在聲學和語音領域的十餘年的技術積累,其回聲抵消、噪聲抑制、聲源定位、混響消除、波束形成、語音喚醒等核心技術在行業內一直處於領先水平。為更好地滿足電話會議的通話需求,Free Go採用了來自聲加科技的回聲消除技術,實現360° 全方位、超強拾音,清晰傳達每一次精彩瞬間;3 米拾音範圍,輕鬆覆蓋 25 平米室內空間;採用雙麥克風密閉腔體設計,配合 AEC 自適應回聲抑制算法,有效抑制回聲;支持全雙工對講技術,讓語音交流如面對面般清晰順暢。
  • 搭載聲加科技回聲消除技術,小米戶外藍牙音箱賦能高清暢聊
    回聲消除算法和通話環境降噪算法的加入,保證了高清晰的通話質量,讓雙方同時說話時都能清晰連貫地聽到對方的聲音,不僅消除了回聲,而且不降低音箱外放音量。因此,即使將此款音箱的音量開到最大,通話雙方照樣可以輕鬆暢聊,而不用擔心對方聽到回聲或者聽不清你講話。
  • 親加通訊雲「語音SDK」 讓手遊更「聲」動
    對遊戲玩家來說,除了遊戲本身,交互社交在遊戲中也有極強的娛樂性。因此對遊戲廠商來說,如何提升遊戲自身的交互和遊戲玩家的社交體驗,是每一個CP規劃遊戲的必要元素。親加通訊雲語音sdk將為遊戲開發者提供一站式的音視頻互動溝通與社交服務,覆蓋遊戲語音(遊戲內實時多人通話,語音識別(語音轉文字),語音留言,),遊戲公會管理, im社交,遊戲視頻直播等能力插件。
  • 搭載聲加科技回聲消除技術,華為Free GO便攜藍牙音箱實現全雙工...
    為更好地滿足電話會議的通話需求,Free Go採用了來自聲加科技的回聲消除技術,實現360° 全方位、超強拾音,清晰傳達每一次精彩瞬間;3 米拾音範圍,輕鬆覆蓋 25 平米室內空間;採用雙麥克風密閉腔體設計,配合 AEC 自適應回聲抑制算法,有效抑制回聲;支持全雙工對講技術,讓語音交流如面對面般清晰順暢。
  • 搭載聲加科技回聲消除技術,華為Free GO便攜藍牙音箱實現全雙工高清免提會議體驗
    為更好地滿足電話會議的通話需求,Free Go採用了來自聲加科技的回聲消除技術,實現360° 全方位、超強拾音,清晰傳達每一次精彩瞬間;3 米拾音範圍,輕鬆覆蓋 25 平米室內空間;採用雙麥克風密閉腔體設計,配合 AEC 自適應回聲抑制算法,有效抑制回聲;支持全雙工對講技術,讓語音交流如面對面般清晰順暢。
  • 《守望先鋒》「回聲」獨具辨識度的聲音打造過程
    確定她在動畫中的形象後,團隊又迎來了挑戰:如何將「回聲」在動畫中的懸浮感融入聲音之中?他們該如何創造出「回聲」在遊戲中靠近玩家時發出的「懸浮的腳步聲」?堡壘的大招語音在這位機器人的口中翻譯出來應該是什麼樣子?這些問題都帶來了艱巨的挑戰,但Garnett胸有成竹。「一開始我創造了這個巨大而可笑的音效板,」Garnett說道。「『回聲』沒有什麼機械零件,她是以能量為基礎的。我當時就在合成器和現實生活中尋找這種充滿能量的聲音,而且還要讓我有一種『藍調』的感覺。
  • 太空狼人殺火爆的背後 實時遊戲語音有哪些技術難點
    聲網擁有全球領先的實時遊戲語音解決方案,通過在遊戲內接入實時音視頻,增加玩家沉浸感、社交感,《狼人殺》、《飯局狼人殺》、《Mobile Legends: Bang Bang》、《Yalla Ludo》等國內外知名的遊戲均採用了聲網的實時遊戲語音解決方案,同時聲網還與遊戲引擎商Cocos、Unity 深度整合,Agora 音視頻SDK 已經上線 Unity asset store ,併集成於
  • 語音撬動遊戲市場,聲智科技全新技術助力騰訊王者榮耀智慧機器人
    搭載了聲智科技為騰訊獨家定製的全球首創的穿透式遠場語音交互解決方案,這款機器人,不僅是一款全球限量版的王者榮耀遊戲手辦,更是一款具備「聽」、「說」感知能力的AI遊戲達人!為了給遊戲玩家身臨其境的戰鬥體驗,聲智科技為騰訊王者榮耀榮耀機器人量身打造了全球首創的穿透式遠場語音交互解決方案,通過獨家的 6 麥環形倒置麥克風陣列(Inverse Array)設計,內置穿透式波達方向估計(Penetrated DOA),動態聲場的回聲消除(Vibrated AEC)等獨家定製的AI聲學算法,搭配聲智科技領先的語音喚醒與識別技術,帶給玩家用戶不一樣的語音交互體驗。
  • 聲網發布首個基於Unity的遊戲實時音視頻SDK
    陳若非博士認為,隨著手遊電競化、社交化和全球化,遊戲開發者越來越多地意識到,在手遊中集成遊戲語音和視頻對於提升遊戲本身的質量和用戶體驗,增加遊戲的社交屬性進而提升用戶粘性和用戶留存,具有重大意義。然而,遊戲開發者集成實時音視頻時會特別關注對遊戲本身體驗的影響,尤其是最小化遊戲幹擾,實現起來有很多技術難點,比如與Unity等引擎的兼容性、語音視頻通話質量、功耗最小化、多場景模式和語音識別等功能。如何突破以上技術難點呢?
  • 語音通話不用喊,AI降噪暢快聊
    遊戲中與隊友的語音通話遇到雜音幹擾,電話會議被鄰居家的裝修聲打斷,這些司空見慣的通話場景,應該如何應對?現在,高通驍龍移動平臺憑藉強大的AI性能,可以讓聲音更清晰,提升語音通話體驗。手遊玩家追求的是聲音、畫面、操控的全方位頂級體驗。不過,約上三五好友一起「開黑」時,遊戲中的語音通話可能會遇到外界噪音、遊戲內背景音樂等聲音的挑戰。
  • 戴上助聽器後,為何有的人會感覺有回聲?
    戴上助聽器總感覺有回聲,怎麼辦?「嗡嗡嗡」的聲音迴蕩在腦子裡,就像在木桶中說話一樣。 有時候只是戴上,都沒有開機,也會感覺有回聲,到底是咋回事呢?有什麼辦法解決嗎? 今天小編就來和大家聊聊助聽器回聲的問題。
  • 電腦麥克風電流聲解決方法,錄音設備噪聲抑制回聲消除圖文教程
    在增強標籤欄中,可以把噪聲抑制和回聲消除這兩個選項選擇上,選擇之後麥克風電流聲基本上就消除了
  • 回聲ECHO遊戲怎麼操作 回聲ECHO遊戲操作圖文說明
    導 讀 回聲ECHO遊戲怎麼操作?具體怎麼玩?接下來小編就為小夥伴們準備了回聲ECHO遊戲操作圖文說明,一起來看看吧!
  • Unity3D遊戲語音功能如何實現
    Unity3D是美國Unity Technologies公司開發的一個全面整合的專業遊戲引擎,像我們日常所熟知的《王者榮耀》、《絕地求生》等遊戲都是應用它來開發的,它可以廣泛應用於手遊、網遊、單機以及新的VR遊戲等開發領域,那它的遊戲語音功能是如何實現的?
  • 蘋果如何讓 Siri 在 HomePod 上更聰明?技術細節
    在智慧型手機上使用語音助理時,用戶的嘴巴通常是很靠近收音的麥克風,但使用智能音箱的情境則不同,用戶往往在有點距離的位置來操控音箱,這種「遠場交互」或是嘈雜環境就帶來了許多挑戰,包括回聲、混響(reverberation)和噪音等,都會降低目標說話者音頻的質量和可理解度,是智能音箱在設計上必須克服的難題。而 HomePod 上 的 Siri 如何正確識別命令?