實(shí)時語音視頻通話SDK如何實(shí)現(xiàn)聽聲辨位
通過聽聲音可以辨別聲源的位置,這是我們習(xí)以為常的生活認(rèn)知。從技術(shù)的角度來說,聽聲辨位其實(shí)真的一點(diǎn)都不簡單。我們?nèi)祟悜?yīng)該感謝上天的造化,賦予我們一雙巧奪天工的耳朵,讓我們可以毫不費(fèi)力地做到聽聲辨位。在語音視頻實(shí)時通信的世界里,要實(shí)現(xiàn)聽聲辨位,卻是要耗費(fèi)一番心思的事情。
雙耳效應(yīng)
關(guān)于人耳聽聲辨位的原理,這里不再贅述。有需要了解的同學(xué)請自行搜索“雙耳效應(yīng)”問度娘。
簡單地來說,聽聲辨位的基礎(chǔ)是左右耳朵從同一聲源獲得的聲音信息有細(xì)微的差別:到達(dá)左右耳朵的時間不一樣在左右耳朵空間上的相位不一樣音色(頻率)不一樣音級(波幅)不一樣人腦和雙耳就是根據(jù)這兩組聲音信息的細(xì)微區(qū)別,判斷出聲源的位置的。
人類的雙耳在自然環(huán)境進(jìn)行聽聲辨位,已經(jīng)有過數(shù)百萬年的實(shí)戰(zhàn)經(jīng)驗(yàn),以至于我們認(rèn)為這是理所當(dāng)然的事情。然而,隨著科技的發(fā)展,我們習(xí)以為常的認(rèn)知遇到了突而其來的挑戰(zhàn)。
二十世紀(jì)初遇到的第一個有代表性的挑戰(zhàn)是留聲機(jī)。立體聲技術(shù)較好地為模擬聲音解決了立體音效的問題。
基礎(chǔ)的立體聲技術(shù)是采用兩個麥克風(fēng)進(jìn)行拾音,獲得兩組波形獨(dú)立的聲音信號,然后進(jìn)行獨(dú)立的處理,在播放的時候采用兩個揚(yáng)聲器獨(dú)立地播放這兩組聲音信號。這樣,從播放端的角度來說,用戶聽到的是聲音本身的立體音效和用戶周遭空間的立體音效的疊加,能夠達(dá)到聽聲辨位的效果。
二十一世紀(jì)的前二十年,語音視頻實(shí)時通信遇到了移動互聯(lián)網(wǎng),立體聲技術(shù)也遇到技術(shù)限制。這些技術(shù)限制其實(shí)和應(yīng)用場景有關(guān)系。
聽聲辯位的應(yīng)用場景
第一個要提的是游戲場景,如果不是最重要,也是最重要之一。游戲可以分為競技類的和休閑類的。兩類游戲?qū)β犅暠嫖坏囊笠膊槐M相同。
競技類的游戲,包括眾多玩家耳熟能詳?shù)?MMORPG、MOBA 和 FPS。玩過 CS 的同學(xué)都知道,在虛擬場景中是能聽到周遭其它玩家的腳步聲的, 聽聲辨位很多時候比視野更加有效地幫助玩家判斷其它玩家在哪里,這往往是殺敵制勝和脫險保命的關(guān)鍵手段。
現(xiàn)在實(shí)時游戲語音技術(shù)可以讓玩家在 CS 中和隊(duì)友一邊并肩作戰(zhàn)一邊對話溝通。如果玩家通過游戲語音通話判斷出隊(duì)友的位置和通過游戲系統(tǒng)聲音判斷出隊(duì)友的位置不一致,以至于造成判斷錯誤,在分秒必爭的虛擬槍戰(zhàn)中,這可是致命的誤導(dǎo)。
要讓游戲系統(tǒng)聲音反映的虛擬位置和游戲語音通話反映的虛擬位置一致,其實(shí)是蠻難的。游戲系統(tǒng)和游戲語音 SDK 是完全獨(dú)立和解耦的,游戲系統(tǒng)的聲音產(chǎn)生涉及到游戲服務(wù)器和客戶端的協(xié)同,游戲語音 SDK 的語音是從遠(yuǎn)端用戶傳輸過來,考慮到兩個獨(dú)立系統(tǒng)和網(wǎng)絡(luò)傳輸,兩個者之間的步調(diào)要保持一致是十分有挑戰(zhàn)的任務(wù)。
反恐精英 CS 中的聽聲辨位適宜和游戲語音的聽聲辨位結(jié)合
休閑類的游戲包括棋牌等人數(shù)較少節(jié)奏較慢的游戲,通過游戲語音邊玩邊聊天是一個剛性的社交需求。
請各位閉眼想象,你和其它三個好友在線上打麻將,同時通過語音嘮叨家常。如果你能夠通過聽左、右和前方三個人的聲音,分辨出他們就像是坐在你左、右和前方三個位置,音效體驗(yàn)一下子就爆表了。
狼人殺游戲更加不在話下,這種完全依托語音會話建立起來的社交游戲,如果能夠通過聽聲音就能辨別出講話的人的方位,閉著眼睛去感覺,就像是一伙朋友圍著圓桌面對面的玩狼人殺游戲呢。
第二個對聽聲辯位有需求的場景是在線教育的小班課堂。舉一個比較具體的例子,在線少兒英語小班課,應(yīng)該是對線上互動要求最高的一種在線課堂形態(tài),沒有之一。小朋友的注意力不容易集中,對課堂趣味性和互動性的要求特別高。
如果小朋友能夠通過聽聲感覺到老師就坐在正前方講臺的位置,其它小朋友坐在前后座位各個方位,由遠(yuǎn)而近多個距離層次都有小朋友,就像是在真實(shí)的擺滿書桌的教室里面的聲音效果一樣,這樣無疑是大大增強(qiáng)了小朋友的注意力集中程度。
其它的一些應(yīng)用場景,比如說語音社交、視頻社交和互動直播,聽聲辨位的效果也會讓用戶感到驚艷。如果你加入 houseparty 的視頻聊天房間,能聽到參加趴踢的朋友分布在你前后左右的各個位置,那種沉浸式的聽音感覺會讓你像是整個人一下子投入到趴踢的人群中去。
這些應(yīng)用場景即構(gòu) ZEGO 都有豐富的客戶案例,即構(gòu) ZEGO 的聽聲辨位技術(shù)能讓用戶在這些應(yīng)用場景里獲得 360 度空間感的聽聲體驗(yàn)。然而,客戶越來越苛刻的需求,驅(qū)使著即構(gòu) ZEGO 不斷的去打磨和升級其聽聲辨位技術(shù),來給予用戶最優(yōu)的體驗(yàn)。
移動終端的處理能力分秒不停地飛速發(fā)展,5G 的推出如果不出意外也會在 2019 年到來,加上 VR/AR 技術(shù)的日漸成熟,沉浸式的語音視頻實(shí)時互動通信將會成為一種生活方式。
當(dāng)你帶著 VR 頭顯,環(huán)顧 360 度都看到遠(yuǎn)端的朋友的視頻影像的時候,你是不是也期待他們的聲音聽起來也像是從他們看起來的那個位置傳過來一樣?到那時候,聽聲辨位技術(shù)也會成為這種生活方式的必備支柱。
硬件條件的限制
上面對應(yīng)用場景的展望和抒情有點(diǎn)太超前了,我們稍微回到 2017 年下半年的現(xiàn)實(shí)中來。雖然夢想很美好,但是現(xiàn)實(shí)很殘酷,現(xiàn)在手機(jī)硬件條件還存在諸多限制。
目前,絕大部分的手機(jī)采集聲音的麥克風(fēng)只有一個。當(dāng)然有朋友反對說,iPhone 不是有好幾個麥克風(fēng)嗎?其實(shí)采集語音的麥克風(fēng)還是只有一個,其它的麥克風(fēng)是用來做噪聲抑制的。一個麥克風(fēng)采集到的聲音就是單聲道的,不會產(chǎn)生立體聲的效果,也就是不會讓你聽聲音就能辨別出聲源的位置。
目前,絕大部分的手機(jī)只有一個揚(yáng)聲器,只有少數(shù)的手機(jī)是支持立體聲的。這里要區(qū)別分一下,打電話的時候聽電話那個喇叭不是揚(yáng)聲器,點(diǎn)了免提鍵后手機(jī)不需要貼到耳朵邊的時候發(fā)出聲音的那個喇叭才是揚(yáng)聲器,播放音樂的時候發(fā)聲音的喇叭也就是揚(yáng)聲器。
既然只有一個揚(yáng)聲器,那么不管聲音信號是不是立體聲的,播放出來的聲音效果都是單聲道的。
在渲染的時候,應(yīng)用程序把聲音數(shù)據(jù)放到一個緩沖區(qū),操作系統(tǒng)把聲音數(shù)據(jù)取出來播放,如果只有一個揚(yáng)聲器的話,巧婦難為無米之炊,臣妾也表示辦不到,即使是立體聲信號也會被降級為單聲道播放。當(dāng)然,耳機(jī)線有左右兩個喇叭,插入耳機(jī)線以后,手機(jī)就支持立體聲播放了。
單聲道虛擬成立體聲
如果發(fā)送端采用外部采集,采集的設(shè)備有兩個麥克風(fēng),或者本身就是立體聲麥克風(fēng),那么采集進(jìn)來的聲音信號就是立體聲的。立體聲信號包含兩組獨(dú)立的波形,由于這兩組波形有相關(guān)性,可以一起編碼傳輸,在接收端解碼以后再獨(dú)立地渲染,最終獲得立體聲的效果。
如果發(fā)送端采用手機(jī)的唯一麥克風(fēng),采集進(jìn)來的聲音信號就是單聲道的。如果要在接收端獲得立體聲的效果,就要把單聲道的聲音信號虛擬成立體聲的。不是說巧婦難為無米之炊嗎?這里也不完全是“無米”,畢竟還是有一組單聲道波形數(shù)據(jù)的。
具體的做法是,首先對聲音傳播路徑進(jìn)行建模,然后輸入原始的波形數(shù)據(jù),還有距離 d 和角度 a 兩個參數(shù),模型會輸出兩個獨(dú)立的波形,代表左右聲道的聲音信號。
這兩個波形和原始的波形作比較,在相位,音色和音調(diào)都有所調(diào)整,盡量地逼近原始波形在自然環(huán)境中傳播到用戶的左右耳朵后形成的兩個不同的波形。這兩個波形有相關(guān)性,因此一起編碼后的帶寬是小于每一個波形帶寬的兩倍。
虛擬立體聲信號數(shù)據(jù)到達(dá)接收端以后,結(jié)果解碼就可以得到兩個獨(dú)立的波形聲音信號數(shù)據(jù)。如果是在手機(jī)揚(yáng)聲器播放出來,效果還是單聲道的,如果通過耳機(jī)播放出來,就能呈現(xiàn)出立體聲的效果,用戶可以聽出聲音的空間感,并且依此進(jìn)行聽聲辯位。
即構(gòu) ZEGO 把單聲道虛擬成立體聲, 獲得沉浸式聽聲辨位的效果
把單聲道波形虛擬成兩個獨(dú)立的立體聲波形,是在目前移動端硬件限制條件下的一個技術(shù)處理手段。虛擬立體聲的處理可以在發(fā)送端進(jìn)行,也可以在接收端進(jìn)行。在哪里進(jìn)行虛擬化,要看具體的場景需要。
如果有混音的需求,也就是要把語音信號和背景音樂混合在一起的話,那么比較適合在發(fā)送端來做虛擬立體聲;如果沒有混音的需求,那么比較適合在接收端做虛擬立體聲。
背景音樂一般是立體聲的,而且是在發(fā)送端輸入的。如果需要進(jìn)行混音,而混音必須要在發(fā)送端進(jìn)行,那么背景音樂和語音信號都要是立體聲才能對應(yīng)得混合。
因此,虛擬立體聲必須要發(fā)送端完成,然后虛擬出來的語音立體聲才能和背景音的立體聲混合,混合好以后再把立體聲信號進(jìn)行編碼傳輸,最后到了接收端解碼以后就可以把立體聲播放出來。
如果不需要進(jìn)行混音,那么可以把單聲道聲音信號直接編碼發(fā)送,接收端收到后進(jìn)行解碼,再把單聲道聲音信號虛擬成立體聲,這樣傳輸?shù)膸捑涂梢宰龅阶畹汀?/p>
當(dāng)互動直播遇到立體聲
隨著硬件的快速更新?lián)Q代,在不遠(yuǎn)的將來,手機(jī)很可能會支持立體聲,擁有雙麥克風(fēng)(考慮到手機(jī)的物理尺寸較小,筆者嚴(yán)重懷疑雙麥克風(fēng)的效果)和雙揚(yáng)聲器。
也許你會覺得這是普大喜奔的好事情,再也不用費(fèi)腦去搞虛擬立體聲了,然而有個現(xiàn)實(shí)要讓你心碎:即使手機(jī)支持立體聲,在進(jìn)行互動直播或者互動語音視頻通話的時候,手機(jī)依然只能采用單聲道采集,因此,還是要繼續(xù)搞虛擬立體聲,這是跑不掉的事情。
為什么在互動直播的時候只能采取單聲道而不能采取立體聲呢?下圖展示了使用立體聲手機(jī)進(jìn)行回聲消除的邏輯,大家看一下此圖就理解互動直播不能采取立體聲的緣由了。
即構(gòu) ZEGO:采用立體聲的手機(jī)做回聲消除過分復(fù)雜
參照上圖,我們看一下語音數(shù)據(jù)的是如何流動的:
- 遠(yuǎn)端的左右兩個麥克風(fēng)分別采集左右聲道的語音數(shù)據(jù);
- 近端的左右兩個揚(yáng)聲器分別播放左右聲道的語音數(shù)據(jù);
- 近端左邊的揚(yáng)聲器發(fā)出的聲音經(jīng)過回聲饋路會被近端左右的兩個麥克風(fēng)采集進(jìn)去;
- 近端右邊的揚(yáng)聲器和 #3 同理;
- 近端左邊的麥克風(fēng)采集進(jìn)來的聲音信號包括了左右兩個揚(yáng)聲器產(chǎn)生的回聲;
- 近端右邊的麥克風(fēng)和 #5 同理;
- 對左邊麥克風(fēng)采集的聲音進(jìn)行回聲消除的時候,除了參考遠(yuǎn)端左聲道聲音信號消除左邊揚(yáng)聲器產(chǎn)生的回聲,還要參考遠(yuǎn)端右聲道聲音信號消除右邊揚(yáng)聲器產(chǎn)生的回聲;
- 對右邊的麥克風(fēng)采集的聲音進(jìn)行回聲消除和 #7 同理。
也就是說,對左邊麥克風(fēng)采集進(jìn)來的聲音要消除左右兩個揚(yáng)聲器產(chǎn)生的回聲,對右邊麥克風(fēng)采集進(jìn)來的聲音進(jìn)行回聲消除也同理,總共要進(jìn)行四次回聲消除,并且要從每一個麥克風(fēng)采集進(jìn)來的聲音信號里消除兩個揚(yáng)聲器造成的回聲,計(jì)算量一下子變成單聲道情形的四倍,復(fù)雜度更是遠(yuǎn)超四倍。
同等條件下,立體聲回聲消除的效果比起單聲道回聲消除的效果差。目前業(yè)界的實(shí)踐表明,立體聲回聲消除的效果并不理想。因此,在涉及到互動直播或者互動語音視頻實(shí)時通話的場景,還是要使用單聲道采集和渲染比較能簡單而且能保障效果。
結(jié)語
聽聲辨位是人們在自然環(huán)境中習(xí)以為常的事情,語音視頻實(shí)時通信的愿景就是要在互聯(lián)網(wǎng)上完美地還原自然環(huán)境的通話場景,這也是即構(gòu) ZEGO 孜孜不倦地追求的使命。
隨著 AR/VR 的發(fā)展,沉浸式的語音和視頻消費(fèi)方式成為常態(tài),在進(jìn)行語音視頻實(shí)時通話的時候,人們也會要求能夠做到聽聲辨位,在游戲語音、語音社交、視頻社交、視頻會議和在線教育等場景,會有廣泛的需求和應(yīng)用。
作者簡介:冼牛,即構(gòu)科技資深語音視頻專家,北京郵電大學(xué)計(jì)算機(jī)碩士,香港大學(xué)工商管理碩士,多年從事語音視頻云服務(wù)技術(shù)研究,專注互動直播技術(shù)、語音視頻社交和實(shí)時游戲語音。
【本文為51CTO專欄作者“冼牛”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者(微信號:xianniu1216)】