Oculus Spatializer Plugin (OSP)

測試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/

  1. 創建一個新的工程

  2. 雙擊OculusSpatializer.unitypackage,導入all

  3. 測試OSPTestScene

OSPTestScene

點擊OSPTest,直接運行,可以看到3個球,每個球都在環播放音樂。

OSPManager

https://developer.oculus.com/documentation/audiosdk/latest/concepts/osp-unity-ospmanager/

包含信息

OSPManager包含本應用中spatializer的全局變量信息。

  1. Bypass:選中後,就不進行空間化,所有通過OSPAudioSource的聲音會使用Unity native 2D panning。

  2. Global Scale:1表示unity的一個單位對應1m,0.01表示unity的一個單位對應1cm。

  3. Gain:由於spatialized聲音的音量被會spatializer減小,因此需要對這些聲音加一個增量,讓它們聽起來和非空間化的相同。

  4. Enable(EARLY REFLECTIONS):增強空間化的效果,但是會提高CPU的使用率。

  5. Reverb On:給輸出加入一個固定的reverb tail(逐漸衰弱的尾巴)。這個reverb是通過根據房間參數的反射計算得到的,並不一定會提到CPU的使用率。修改房間的參數可能會引起CPU使用率的提高。

  6. Room Dimensions:理論房間的維度,用來計算反射。房間越大,反射的越遠。目前房間的大小範圍在【0-230米】

  7. Reflection Values:0表示聲音在牆面完全被吸收,1表示完全反射。

  8. Reflection Gain:用來調整反射後的信號強度(both early reflections and reverb)。以米爲單位,表示聲音在衰減爲0之前可以傳播多遠的距離。這個值越大,反射的聲音也越大。

使用說明

  1. 最多可以空間化64個聲音。

  2. 音頻輸出格式應該爲2.1或者2 Stereo Channel Configuraion。Spatializer無法處理更高參數的信道。

  3. 這個理論的房間會根據聽者的位置來計算反射,並且根據聽者的朝向來旋轉。未來的版本可以讓用戶在一個靜止的房間裏走來走去。

  4. 當使用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

介紹幾個比較重要的變量。

  1. Audio Clip:聲音文件

  2. Output:聲音的輸出爲audio listner還是audio mixer(一般是none)

  3. Mute:靜音

  4. Loop:循環播放

  5. Volumn:音量

  6. Pitch:播放速度,1爲正常速度

  7. Stereo Pan:3D引擎對聲音的影響

  8. Spatial Blend:0爲2D,1爲3D

  9. Reverb Zone Mix:

  10. 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中有一系列控制空間化聲音的函數。

  1. Bypass:可以控制聲源是採用3D空間化還是採用原始的2D Unity panning。這個特徵在程序運行時,靈活的控制OSP Audio Sources,與現有的音頻管理器融合起來也更簡便。

  2. Play On Awake: 推薦使用該開關,而不是Unity AudioSource中的原生的Play On Awake。直接使用原生的也可以播放,但是會在開始時聽到一個hiccup噪聲,這是由spatializer在得到所有的聲源時引起的。

  3. Disable Reflections:如果被設爲true,則該聲源將不會去計算反射/回聲,因爲計算回聲需要額外的CPU計算,因此可以用來減少CPU的消耗。當然,OSP manager如果是false,則該變量不會有任何影響。

  4. 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類

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章