【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类

相关文章
相关标签/搜索