本文是Oculus Audio SDK文檔的閱讀筆記,做者只對感興趣的內容進行了簡單的翻譯。
原文連接:https://developer.oculus.com/documentation/audiosdk/latest/concepts/audio-intro-overview/ios
從投幣遊戲開始,音頻就是計算機和視頻遊戲體驗的重要一部分。相較於傳統行業,虛擬現實採用頭戴設備(HMD)和耳機,能夠追蹤用戶的頭部的方向和位置,這些信息能夠爲音頻技術帶來許多新的機遇。目前,虛擬現實僅僅關注視覺信息,例如分辨率、延遲和追蹤,可是音頻也必須跟上來提供最好的現場體驗。ui
本文關注於虛擬現實音頻相關的挑戰、機遇和解決方法,以及傳統遊戲開發相關技術須要針對VR作哪些改變。本文不對音頻、聽覺和人的聽覺系統進行深刻的研究,若是感興趣的話,能夠谷歌如下關鍵詞:Head-Related Impulse Response,Head-Related Transfer Function,Sound Localization。編碼
人只用兩隻耳朵,就能夠在三維空間中定位聲音,根據時間、相位、強度和頻譜的變化,依靠於心理聲學和推理去定位。spa
本節總結了人類定位聲音的方法,並應用這些知識來解決空間定位問題,讓開發者能夠把單聲道的聲音信號進行轉化,讓這個聲音聽起來像是來自於空間中的某個具體位置。翻譯
人類定位聲音的兩個關鍵因素,分別是方向和距離。視頻
側面的定位是最簡單的,當一個聲音更靠近左邊時,左耳會比右耳更早聽到,而且聽到的聲音更大。一般來講,兩隻耳朵聽到的聲音越接近,那這個聲音就越靠近中間。遊戲
而後,還有一些有趣的細節。首先,咱們主要依靠到達兩耳的延遲來定位聲音,也就是「耳間時間差異」(ITD: interaural time difference);或者依靠兩耳的音量差異,也就是「耳間強度差異」(ILD: interaural level difference)。咱們使用的定位技術極大的依賴了信號的頻率內容。遊戲開發
當聲音低於必定頻率時(500到800HZ之間,取決於源),會很難分辨出強度的差異。可是,在這個頻率範圍的聲音,比人腦殼的規模還要大半個波長(have half wavelengths greater than the dimensions of a typical human head),讓咱們能夠依靠兩耳之間的時間信息(phase相位)區別。開發
另外一個極端,當聲音的頻率高於1500HZ時,比腦殼小半個波長,用相位信息來定位聲音就再也不可靠了。對於這些頻率,咱們須要根據由腦殼引發的強度差異,叫作head shadowing,這是因爲腦殼的阻擋,致使較遠的那隻耳朵聽到的聲音強度有所衰減,以下圖所示。文檔
咱們也根據信號的起始時間差來判斷,當聲音播放時,哪一個耳朵先聽到會有很大影響,可是這個僅能幫咱們定位突變的聲音,而不是連續的聲音。
對於頻率在800HZ到1500HZ的聲音,咱們須要依靠時間差異和強度差異來同時判斷。
先後的判斷會比側面的判斷難不少,由於咱們沒法依靠時間差和強度差,由於它們的差爲0,以下圖所示。
人體依靠由人體和腦殼引發的光譜差異(spectral modifications)來解決混淆。這些光譜的差異是由於腦殼、脖子、肩膀、軀幹、尤爲是外耳(或耳廓)引發的過濾和反射。因爲來自不一樣方向的聲音與人體的交互會不同,咱們的大腦經過光譜的差異來推測源的方向。從前方過來的聲音會與耳廓的內部產生共振,而從後側傳來的聲音被爲耳廓削弱(shadowed)。相似的,從上方傳來的聲音會在肩膀處反射,而來自下方的聲音會被軀幹和肩膀阻擋(shadowed)。
以上這些反射和阻擋被結合起來,創造了一個方向選擇濾波器(direction selective filter)。
問題:如何考慮人的高度和姿式?
一個方向選擇濾波器能夠被編碼爲一個腦殼相關的轉換方程(HRTF),這個HRTF方程是當今3D聲音空間關鍵技術的基石,具體怎麼樣來構造這個方程,將在後文中進行詳細的說明。
2.1.3.1 頭部模型
僅僅依靠HRTF方程組還不足以準肯定位聲音,所以咱們須要一個腦殼模型來輔助定位。經過旋轉腦殼,就能夠把一個先後定位的問題轉換爲側面定位的問題,讓咱們能夠更好去解決。
例以下圖中的A和B沒法經過強度和時間的差異來區分,所以它們是同樣的。經過輕微的旋轉腦殼,聽者就改變了兩隻耳朵的時間和強度差異,來幫助定位聲音。D1比D2要近,所以能夠判斷出聲音在用戶的左側(後側)。
相似的,扭動腦殼,能夠幫助定位垂直的物體。在下圖中,D1變短D2變長,所以能夠判斷物體在腦殼的上面。
ILD,ITD和HRTFs能夠幫助咱們定位聲音源頭的方向,可是對於聲音的距離只能給出一個寬泛的參考。爲了定位距離,咱們須要考慮一系列的因素,包括起始時間的延遲,聲音和混音的比例,以及運動視差。
聲音大小是距離最明顯的線索,可是有時候會誤導。若是咱們缺乏參照,咱們就沒法判斷聲音從源頭的削弱來衡量距離。幸運的是,咱們對生活中的聲源很熟悉,例如樂器、人聲、動物、汽車等,所以咱們很好的判斷這些距離。
對於合成的和不熟悉的聲源,咱們沒有參照,那就只能依靠其餘的信息或者是相對音量的改變來判斷一個聲音是接近仍是遠離。
起始時間延遲描述了聲音和回聲的區間,這個區間越長,咱們就離聲源越近。無回聲或者空曠的環境中,例如沙漠,不會產生可感知的回聲,這會致使距離的估計更加困難。
在一個有回聲的環境中,聲音之間會有很長的、散開的音尾融合,在不一樣平面上反射,最終消失。若是咱們聽到的原聲比混聲要多,那咱們就離聲源越近。
音頻工程師在人工混音時,經常須要考慮這個因素,來調整樂器和歌手的位置。
聲音的運動視差能夠體現距離,例如比較近的昆蟲能夠從左邊很快的飛到右邊,可是遠處的飛機可能須要好多秒來達到一樣的效果。所以,若是一個聲源運動的比一個固定的視角要快,那咱們就猜想這個聲源來自附近。