測試Oculus
使用unity和oculus測試3D聲音的效果。
Oculus Spatializer Plugin (OSP)是針對Unity工具的一款插件,讓單聲道的聲源可以再3D空間中根據用戶頭部的位置來進行空間化。
目前OSP還存在一些缺陷:
-
某些功能,例如priotiry systems,還不完整
-
當early reflections打開時,CPU的使用率會提高,並且隨着房間規模的增大,成比例的提高。
-
用戶可能會聽到click,當聲音被一個優先級更高的聲音偷走的時候。
安裝軟件
下載地址:https://developer.oculus.com/downloads/
-
Oculus Runtime for Windows
-
Oculus SDK for Windows
-
Oculus Audio SDK Plugins
-
Unity5.1 X86
-
VS_UnityTool2013(非必須)
SDK安裝入Unity中
網址:https://developer.oculus.com/documentation/audiosdk/latest/concepts/osp-unity-install/
-
創建一個新的工程
-
雙擊OculusSpatializer.unitypackage,導入all
-
測試OSPTestScene
OSPTestScene
點擊OSPTest,直接運行,可以看到3個球,每個球都在環播放音樂。
OSPManager
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()
OSPAudioSource
https://developer.oculus.com/documentation/audiosdk/latest/concepts/osp-unity-ospaudiosource/
使用OSPAudioSource來創在要被空間化的聲音。OSPAudioSource包含一個原始Unity Audio Source元素和一個OSPAudioSource腳本元素與spatializer進行交互。
Unity Audio Source
介紹幾個比較重要的變量。
-
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類