實時語音視頻通話SDK如何實現聽聲辨位

通過聽聲音可以辨別聲源的位置,這是我們習以為常的生活認知。從技術的角度來說,聽聲辨位其實真的一點都不簡單。我們人類應該感謝上天的造化,賦予我們一雙巧奪天工的耳朵,讓我們可以毫不費力地做到聽聲辨位。在語音視頻實時通信的世界裡,要實現聽聲辨位,卻是要耗費一番心思的事情。

雙耳效應

關於人耳聽聲辨位的原理,這裡不再贅述。有需要了解的同學請自行搜索「雙耳效應」問度娘。

簡單地來說,聽聲辨位的基礎是左右耳朵從同一聲源獲得的聲音信息有細微的差別:到達左右耳朵的時間不一樣在左右耳朵空間上的相位不一樣音色(頻率)不一樣音級(波幅)不一樣人腦和雙耳就是根據這兩組聲音信息的細微區別,判斷出聲源的位置的。

人類的雙耳在自然環境進行聽聲辨位,已經有過數百萬年的實戰經驗,以至於我們認為這是理所當然的事情。然而,隨著科技的發展,我們習以為常的認知遇到了突而其來的挑戰。

二十世紀初遇到的第一個有代表性的挑戰是留聲機。立體聲技術較好地為模擬聲音解決了立體音效的問題。

基礎的立體聲技術是採用兩個麥克風進行拾音,獲得兩組波形獨立的聲音信號,然後進行獨立的處理,在播放的時候採用兩個揚聲器獨立地播放這兩組聲音信號。這樣,從播放端的角度來說,用戶聽到的是聲音本身的立體音效和用戶周遭空間的立體音效的疊加,能夠達到聽聲辨位的效果。

二十一世紀的前二十年,語音視頻實時通信遇到了移動互聯網,立體聲技術也遇到技術限制。這些技術限制其實和應用場景有關係。

聽聲辯位的應用場景

第一個要提的是遊戲場景,如果不是最重要,也是最重要之一。遊戲可以分為競技類的和休閑類的。兩類遊戲對聽聲辨位的要求也不盡相同。

競技類的遊戲,包括眾多玩家耳熟能詳的 MMORPG、MOBA 和 FPS。玩過 CS 的同學都知道,在虛擬場景中是能聽到周遭其它玩家的腳步聲的, 聽聲辨位很多時候比視野更加有效地幫助玩家判斷其它玩家在哪裡,這往往是殺敵制勝和脫險保命的關鍵手段。

現在實時遊戲語音技術可以讓玩家在 CS 中和隊友一邊並肩作戰一邊對話溝通。如果玩家通過遊戲語音通話判斷出隊友的位置和通過遊戲系統聲音判斷出隊友的位置不一致,以至於造成判斷錯誤,在分秒必爭的虛擬槍戰中,這可是致命的誤導。

要讓遊戲系統聲音反映的虛擬位置和遊戲語音通話反映的虛擬位置一致,其實是蠻難的。遊戲系統和遊戲語音 SDK 是完全獨立和解耦的,遊戲系統的聲音產生涉及到遊戲伺服器和客戶端的協同,遊戲語音 SDK 的語音是從遠端用戶傳輸過來,考慮到兩個獨立系統和網路傳輸,兩個者之間的步調要保持一致是十分有挑戰的任務。

反恐精英 CS 中的聽聲辨位適宜和遊戲語音的聽聲辨位結合

休閑類的遊戲包括棋牌等人數較少節奏較慢的遊戲,通過遊戲語音邊玩邊聊天是一個剛性的社交需求。

請各位閉眼想像,你和其它三個好友在線上打麻將,同時通過語音嘮叨家常。如果你能夠通過聽左、右和前方三個人的聲音,分辨出他們就像是坐在你左、右和前方三個位置,音效體驗一下子就爆表了。

狼人殺遊戲更加不在話下,這種完全依託語音會話建立起來的社交遊戲,如果能夠通過聽聲音就能辨別出講話的人的方位,閉著眼睛去感覺,就像是一夥朋友圍著圓桌面對面的玩狼人殺遊戲呢。

第二個對聽聲辯位有需求的場景是在線教育的小班課堂。舉一個比較具體的例子,在線少兒英語小班課,應該是對線上互動要求最高的一種在線課堂形態,沒有之一。小朋友的注意力不容易集中,對課堂趣味性和互動性的要求特別高。

如果小朋友能夠通過聽聲感覺到老師就坐在正前方講台的位置,其它小朋友坐在前后座位各個方位,由遠而近多個距離層次都有小朋友,就像是在真實的擺滿書桌的教室裡面的聲音效果一樣,這樣無疑是大大增強了小朋友的注意力集中程度。

其它的一些應用場景,比如說語音社交、視頻社交和互動直播,聽聲辨位的效果也會讓用戶感到驚艷。如果你加入 houseparty 的視頻聊天房間,能聽到參加趴踢的朋友分布在你前後左右的各個位置,那種沉浸式的聽音感覺會讓你像是整個人一下子投入到趴踢的人群中去。

這些應用場景即構 ZEGO 都有豐富的客戶案例,即構 ZEGO 的聽聲辨位技術能讓用戶在這些應用場景里獲得 360 度空間感的聽聲體驗。然而,客戶越來越苛刻的需求,驅使著即構 ZEGO 不斷的去打磨和升級其聽聲辨位技術,來給予用戶最優的體驗。

移動終端的處理能力分秒不停地飛速發展,5G 的推出如果不出意外也會在 2019 年到來,加上 VR/AR 技術的日漸成熟,沉浸式的語音視頻實時互動通信將會成為一種生活方式。

當你帶著 VR 頭顯,環顧 360 度都看到遠端的朋友的視頻影像的時候,你是不是也期待他們的聲音聽起來也像是從他們看起來的那個位置傳過來一樣?到那時候,聽聲辨位技術也會成為這種生活方式的必備支柱。

硬體條件的限制

上面對應用場景的展望和抒情有點太超前了,我們稍微回到 2017 年下半年的現實中來。雖然夢想很美好,但是現實很殘酷,現在手機硬體條件還存在諸多限制。

目前,絕大部分的手機採集聲音的麥克風只有一個。當然有朋友反對說,iPhone 不是有好幾個麥克風嗎?其實採集語音的麥克風還是只有一個,其它的麥克風是用來做雜訊抑制的。一個麥克風采集到的聲音就是單聲道的,不會產生立體聲的效果,也就是不會讓你聽聲音就能辨別出聲源的位置。

目前,絕大部分的手機只有一個揚聲器,只有少數的手機是支持立體聲的。這裡要區別分一下,打電話的時候聽電話那個喇叭不是揚聲器,點了免提鍵後手機不需要貼到耳朵邊的時候發出聲音的那個喇叭才是揚聲器,播放音樂的時候發聲音的喇叭也就是揚聲器。

既然只有一個揚聲器,那麼不管聲音信號是不是立體聲的,播放出來的聲音效果都是單聲道的。

在渲染的時候,應用程序把聲音數據放到一個緩衝區,操作系統把聲音數據取出來播放,如果只有一個揚聲器的話,巧婦難為無米之炊,臣妾也表示辦不到,即使是立體聲信號也會被降級為單聲道播放。當然,耳機線有左右兩個喇叭,插入耳機線以後,手機就支持立體聲播放了。

單聲道虛擬成立體聲

如果發送端採用外部採集,採集的設備有兩個麥克風,或者本身就是立體聲麥克風,那麼採集進來的聲音信號就是立體聲的。立體聲信號包含兩組獨立的波形,由於這兩組波形有相關性,可以一起編碼傳輸,在接收端解碼以後再獨立地渲染,最終獲得立體聲的效果。

如果發送端採用手機的唯一麥克風,採集進來的聲音信號就是單聲道的。如果要在接收端獲得立體聲的效果,就要把單聲道的聲音信號虛擬成立體聲的。不是說巧婦難為無米之炊嗎?這裡也不完全是「無米」,畢竟還是有一組單聲道波形數據的。

具體的做法是,首先對聲音傳播路徑進行建模,然後輸入原始的波形數據,還有距離 d 和角度 a 兩個參數,模型會輸出兩個獨立的波形,代表左右聲道的聲音信號。

這兩個波形和原始的波形作比較,在相位,音色和音調都有所調整,盡量地逼近原始波形在自然環境中傳播到用戶的左右耳朵後形成的兩個不同的波形。這兩個波形有相關性,因此一起編碼後的帶寬是小於每一個波形帶寬的兩倍。

虛擬立體聲信號數據到達接收端以後,結果解碼就可以得到兩個獨立的波形聲音信號數據。如果是在手機揚聲器播放出來,效果還是單聲道的,如果通過耳機播放出來,就能呈現出立體聲的效果,用戶可以聽出聲音的空間感,並且依此進行聽聲辯位。

即構 ZEGO 把單聲道虛擬成立體聲, 獲得沉浸式聽聲辨位的效果

把單聲道波形虛擬成兩個獨立的立體聲波形,是在目前移動端硬體限制條件下的一個技術處理手段。虛擬立體聲的處理可以在發送端進行,也可以在接收端進行。在哪裡進行虛擬化,要看具體的場景需要。

如果有混音的需求,也就是要把語音信號和背景音樂混合在一起的話,那麼比較適合在發送端來做虛擬立體聲;如果沒有混音的需求,那麼比較適合在接收端做虛擬立體聲。

背景音樂一般是立體聲的,而且是在發送端輸入的。如果需要進行混音,而混音必須要在發送端進行,那麼背景音樂和語音信號都要是立體聲才能對應得混合。

因此,虛擬立體聲必須要發送端完成,然後虛擬出來的語音立體聲才能和背景音的立體聲混合,混合好以後再把立體聲信號進行編碼傳輸,最後到了接收端解碼以後就可以把立體聲播放出來。

如果不需要進行混音,那麼可以把單聲道聲音信號直接編碼發送,接收端收到後進行解碼,再把單聲道聲音信號虛擬成立體聲,這樣傳輸的帶寬就可以做到最低。

當互動直播遇到立體聲

隨著硬體的快速更新換代,在不遠的將來,手機很可能會支持立體聲,擁有雙麥克風(考慮到手機的物理尺寸較小,筆者嚴重懷疑雙麥克風的效果)和雙揚聲器。

也許你會覺得這是普大喜奔的好事情,再也不用費腦去搞虛擬立體聲了,然而有個現實要讓你心碎:即使手機支持立體聲,在進行互動直播或者互動語音視頻通話的時候,手機依然只能採用單聲道採集,因此,還是要繼續搞虛擬立體聲,這是跑不掉的事情。

為什麼在互動直播的時候只能採取單聲道而不能採取立體聲呢?下圖展示了使用立體聲手機進行回聲消除的邏輯,大家看一下此圖就理解互動直播不能採取立體聲的緣由了。

即構 ZEGO:採用立體聲的手機做回聲消除過分複雜

參照上圖,我們看一下語音數據的是如何流動的:

1)遠端的左右兩個麥克風分別採集左右聲道的語音數據;

2)近端的左右兩個揚聲器分別播放左右聲道的語音數據;

3)近端左邊的揚聲器發出的聲音經過回聲饋路會被近端左右的兩個麥克風采集進去;

4)近端右邊的揚聲器和 #3 同理;

5)近端左邊的麥克風采集進來的聲音信號包括了左右兩個揚聲器產生的回聲;

6)近端右邊的麥克風和 #5 同理;

7)對左邊麥克風采集的聲音進行回聲消除的時候,除了參考遠端左聲道聲音信號消除左邊揚聲器產生的回聲,還要參考遠端右聲道聲音信號消除右邊揚聲器產生的回聲;

8)對右邊的麥克風采集的聲音進行回聲消除和 #7 同理。

也就是說,對左邊麥克風采集進來的聲音要消除左右兩個揚聲器產生的回聲,對右邊麥克風采集進來的聲音進行回聲消除也同理,總共要進行四次回聲消除,並且要從每一個麥克風采集進來的聲音信號里消除兩個揚聲器造成的回聲,計算量一下子變成單聲道情形的四倍,複雜度更是遠超四倍。

同等條件下,立體聲回聲消除的效果比起單聲道回聲消除的效果差。目前業界的實踐表明,立體聲回聲消除的效果並不理想。因此,在涉及到互動直播或者互動語音視頻實時通話的場景,還是要使用單聲道採集和渲染比較能簡單而且能保障效果。

結 語

聽聲辨位是人們在自然環境中習以為常的事情,語音視頻實時通信的願景就是要在互聯網上完美地還原自然環境的通話場景,這也是即構 ZEGO 孜孜不倦地追求的使命。

隨著 AR/VR 的發展,沉浸式的語音和視頻消費方式成為常態,在進行語音視頻實時通話的時候,人們也會要求能夠做到聽聲辨位,在遊戲語音、語音社交、視頻社交、視頻會議和在線教育等場景,會有廣泛的需求和應用。

作者簡介:冼牛(微信xianniu1216,郵箱noahxian@zego.im,電話13266561305),即構科技資深語音視頻專家,北京郵電大學計算機碩士,香港大學工商管理碩士,多年從事語音視頻雲服務技術研究,專註互動直播技術、語音視頻社交和實時遊戲語音。

<The End>


推薦閱讀:

張明雲的Live——安卓 SDK 開發實戰經驗分享
最全的手游錄屏直播方案(自研思路VS第三方SDK)
廣告sdk竊取用戶隱私:你家的App被下架了嗎?

TAG:語音 | SDK | 視頻通話 |