使用unity和oculus測試3D聲音的效果。ios
Oculus Spatializer Plugin (OSP)是針對Unity工具的一款插件,讓單聲道的聲源能夠再3D空間中根據用戶頭部的位置來進行空間化。ide
目前OSP還存在一些缺陷:函數
某些功能,例如priotiry systems,還不完整工具
當early reflections打開時,CPU的使用率會提升,而且隨着房間規模的增大,成比例的提升。oop
用戶可能會聽到click,當聲音被一個優先級更高的聲音偷走的時候。測試
下載地址:https://developer.oculus.com/downloads/ui
Oculus Runtime for Windowsspa
Oculus SDK for Windows插件
Oculus Audio SDK Plugins繼承
Unity5.1 X86
VS_UnityTool2013(非必須)
網址:https://developer.oculus.com/documentation/audiosdk/latest/concepts/osp-unity-install/
建立一個新的工程
雙擊OculusSpatializer.unitypackage,導入all
測試OSPTestScene
點擊OSPTest,直接運行,能夠看到3個球,每一個球都在環播放音樂。
https://developer.oculus.com/documentation/audiosdk/latest/concepts/osp-unity-ospmanager/
OSPManager包含本應用中spatializer的全局變量信息。
Bypass:選中後,就不進行空間化,全部經過OSPAudioSource的聲音會使用Unity native 2D panning。
Global Scale:1表示unity的一個單位對應1m,0.01表示unity的一個單位對應1cm。
Gain:因爲spatialized聲音的音量被會spatializer減少,所以須要對這些聲音加一個增量,讓它們聽起來和非空間化的相同。
Enable(EARLY REFLECTIONS):加強空間化的效果,可是會提升CPU的使用率。
Reverb On:給輸出加入一個固定的reverb tail(逐漸衰弱的尾巴)。這個reverb是經過根據房間參數的反射計算獲得的,並不必定會提到CPU的使用率。修改房間的參數可能會引發CPU使用率的提升。
Room Dimensions:理論房間的維度,用來計算反射。房間越大,反射的越遠。目前房間的大小範圍在【0-230米】
Reflection Values:0表示聲音在牆面徹底被吸取,1表示徹底反射。
Reflection Gain:用來調整反射後的信號強度(both early reflections and reverb)。以米爲單位,表示聲音在衰減爲0以前能夠傳播多遠的距離。這個值越大,反射的聲音也越大。
最多能夠空間化64個聲音。
音頻輸出格式應該爲2.1或者2 Stereo Channel Configuraion。Spatializer沒法處理更高參數的信道。
這個理論的房間會根據聽者的位置來計算反射,而且根據聽者的朝向來旋轉。將來的版本可讓用戶在一個靜止的房間裏走來走去。
當使用early reflections時,要保證房間是非對稱的。一個立方體房間會產生增強的迴音,形成空間化效果不好。shoebox模型在模擬房間時的效果最好,對於很大的區域或者室外,應該採用一個單獨的衰變模型。
重要:當使用early reflection時,要保證聲源處於房間的內部,不然這個聲音就沒法被聽到。
調用C++庫OculusSpatializerPlugin.dll,主要函數包含:
Awake()
Update()
AcuireContext()
ReleaseContext()
Spatialize(int context, float[] ioBuf)
UpdateEarlyReflections()
https://developer.oculus.com/documentation/audiosdk/latest/concepts/osp-unity-ospaudiosource/
使用OSPAudioSource來創在要被空間化的聲音。OSPAudioSource包含一個原始Unity Audio Source元素和一個OSPAudioSource腳本元素與spatializer進行交互。
介紹幾個比較重要的變量。
Audio Clip:聲音文件
Output:聲音的輸出爲audio listner仍是audio mixer(通常是none)
Mute:靜音
Loop:循環播放
Volumn:音量
Pitch:播放速度,1爲正常速度
Stereo Pan:3D引擎對聲音的影響
Spatial Blend:0爲2D,1爲3D
Reverb Zone Mix:
3D sound settings
Doppler level:多普勒效應,0爲無
Volume Rolloff:聲音的衰變模型
Spread:spread angle
Max Distance:聲音的有效距離
OPS工做時,是做爲Unity Audio Source元素的一個擴展(add-on),從Audio Source元素中延伸出了許多本身的功能,包括距離衰變曲線。
注意:當須要手動啓動聲音時,必須調用OSPAudioSource中的Play和Stop函數,在OSPAudioSource.cs中有一系列控制空間化聲音的函數。
Bypass:能夠控制聲源是採用3D空間化仍是採用原始的2D Unity panning。這個特徵在程序運行時,靈活的控制OSP Audio Sources,與現有的音頻管理器融合起來也更簡便。
Play On Awake: 推薦使用該開關,而不是Unity AudioSource中的原生的Play On Awake。直接使用原生的也能夠播放,可是會在開始時聽到一個hiccup噪聲,這是由spatializer在獲得全部的聲源時引發的。
Disable Reflections:若是被設爲true,則該聲源將不會去計算反射/回聲,由於計算回聲須要額外的CPU計算,所以能夠用來減小CPU的消耗。固然,OSP manager若是是false,則該變量不會有任何影響。
Frequence Hint:有3中選擇,Wideband適合包含較多頻率的內容,例如音樂和演講。Narrowbank適合包含較少頻率的內容,例如正弦波和簡單的音調。None位於二者之間,是默認的參數。有一條經驗,若是一個聲源隨着本身位置的變化,會產生不連續,例如clicking或crackling,這個時候就應該選擇一個narrower frequency hint。
在Unity native Audio Source中的3D Sound Settings能夠被sound designer使用。可是裏面的Pan Level和Spread被OSPAudioSource給重寫了。所以在程序運行時,要保證這些變量不被修改,不然會嚴重影響空間化結果的輸出。
目前只有單聲道的聲音會被空間化。即便用戶在unity中把聲音設置爲3D sound,一個立體聲也不會被分解爲單聲道的聲音。
繼承MonoBehaviour類