使用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类