吃雞遊戲百人語音,如何實現「聽聲辯位」找隊友

一些吃雞遊戲會具有讓玩家能經過聲音辨析隊友位置與距離的功能。具體效果是這樣:html

  1. 在地圖中的兩個玩家,走近至必定距離內,說話就自動能被對方聽到。走遠了,就沒法聽到。
  2. 兩個在可聽範圍內的玩家,隨着相對距離遠近的變化,說話音量也會變化
  3. 玩家的語音具備方位感,可以像遊戲內置音效同樣,判斷出對方與本身的相對方位。

本文將解讀,如何實現上述功能。共分爲三個部分:算法

  1. 可聽範圍的設定
  2. 經過聲音體現玩家之間的相對距離
  3. 經過聲音反映玩家間的相對方位

其中,第2點和第3點其實都是聲音的空間感,也就是「聽聲辯位」,下文會合並在一塊兒講。spa

一.可聽範圍的設定code

一場吃雞遊戲初始共100個玩家,那麼遊戲開始時,這100個玩家加入一個語音大頻道,默認每一個玩家的語音是靜音狀態。設定可聽範圍是以玩家爲圓心,半徑爲R的圓形範圍。有其它玩家走入這個圓形範圍內,二者的語音自動解除靜音,此時說話就能互相聽到了。orm

二. 聲音的空間感視頻

若是想實現聲音的空間感,帶來3D音效體驗,廣泛會利用頭部關聯傳輸算法(head-related transfer functions, HRTF)。若是要理解它,咱們須要先了解三個聲學概念,大腦就是經過他們來判斷聲音在空間中的位置的。htm

首先是雙耳時差(Interaural time differences, ITD),人耳經過聲音到達左右耳的時間差來判斷低頻聲源與人的相對水平距離。聲源與雙耳的角度,決定了雙耳時差大小。blog

因爲經過ITD沒法判斷高頻聲源的位置,這時咱們能夠利用雙耳水平差(Interaural level differences, ILD)來進行判斷。因爲頭部帶來的聲學屏障(acoustic shadow),會讓左右耳聽到的聲音大小與頻率產生差異,由此大腦會判斷出聲源方位。接口

另外,還有頻譜效應(Spectral effects)。聲音在到達後會因外耳結構而造成反射,從不一樣方向來的聲音,反射效果也不一樣,大腦能夠根據它來判斷聲源在垂直方向上的相對方位。 遊戲

咱們能夠經過SpaceX獵鷹號發射現場視頻,更直觀地體會一下聲音的空間感。在這個視頻裏,你能僅經過聲音感覺到不一樣方位的人、火箭的距離,甚至由室內到室外的空間變化。一塊兒戴上耳機來感覺一下吧。(請點擊這裏觀看視頻

HRTF算法基於以上三種效應對聲源進行了處理,經過耳機收聽時會有一種錯覺,好像聲音來自虛擬空間中特定的位置。不少遊戲都經過HRTF來爲玩家提供3D音效。那麼放到吃雞的虛擬環境中,應該怎樣實現呢?

在吃雞的百人地圖中,每一個玩家要有本身的ID,每一個ID的實時座標須要被記錄。

圖:經過簡單的座標可得到隊友方位

見上圖,經過兩個玩家在遊戲地圖中的座標,能夠創建座標系,來計算兩個玩家之間的距離。爲了敘述便利,咱們以綠色玩家爲原點,創建直角座標系,能夠獲得紅色玩家的座標是(-1,1)。

  • 根據座標,判斷音效方位。如圖紅色玩家的座標是(-1, 1),在第二象限,能夠據此設定音效。
  • 根據座標,計算兩個玩家的相對距離。假設聽力範圍的半徑爲2,而如今二者距離約1.4,那麼音量可設定爲最大音量的30%左右。
  • 經過判斷隊友之間所在的座標來控制左右聲道的音量和聲音延時,就能夠令玩家產生方位感了。

「小米槍戰」的新版本經過Agora AMG SDK實現了上述功能。Agora AMG 遊戲實時語音SDK,提供了SetRemoteVoicePosition接口(設置遠端用戶的語音位置 ),開發者只須要指定想要的聲像位置和增益大小,就能利用SDK的HRTF算法,輕鬆實現聽聲辨位的功能。瞭解SDK及接口詳情請戳這裏

相關文章
相關標籤/搜索