【Oculus】使用Unity測試Oculus Audio SDK【原創】

測試Oculus

使用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(非必須)

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類

相關文章
相關標籤/搜索