您的位置:首页 > 移动开发 > Unity3D

如何在Unity中添加三维空间声音Spatial Sounds

2017-02-22 15:34 309 查看
hololens的声音模块是头戴环上,靠近耳朵上方的一个红色的模块,三维空间声音感效果还不错,本文主要讲述如何在项目中使用空间声音特性。我们主要讲述必须的插件组件和unity声音组件和属性的设置来确保空间声音的实现。






Enabling Spatial Sound in Unity 在Unity中启用空间声音


我们需要在Unity中使用声音插件来实现空间声音。这个插件(audio spatalizer plugin)被打包到了Unity,所以只需要在设置菜单中 Edit > Audio > Spatializer 启用Microsoft HRTF拓展就好。因为微软空间声音组件目前取样频率只支持到48000,所以你应该把System Sample Rate属性设为48000来避免在系统输出设备没有设置它为48000的罕见情况下发生HRTF组件错误。





注意:当在系统版本低于Windows 10的设备上使用Windows 10 SDK编译HoloLens应用时,空间声音将不会再编辑器和设备上工作。


Using Spatial Sounds in Unity 在Unity中使用空间声音


通过调整Audio Source组件的3个属性即可在Unity中使用空间声音。步骤如下:

在项目面板中,选中一个附有Audio Source组件的对象

在检视面板中,修改Audio Source组件属性:

选中Spatialize属性

设置Spatial Blend模式为3D

展开3D Sound Settings,并将Volume Rolloff值为 Custom Rolloff





现在就能够在项目中存在很真实的声音。

强烈推荐开发者要熟悉下空间声音设计指南(Spatial Sound design guidelines),它会帮准你快速的集成空间声音到项目中,同时能尽可能的提高空间声音的体验。


Setting Spatial Sound Settings 设置空间声音


微软提供了一些额外的参数设置用来额外控制声音模拟。这些参数分别是最大最小增益、单位增益距离和模拟空间大小。


Minimum Gain 最小增益

任意距离上的最小增益,范围(-96,+12),默认值是-96分贝。


Maximum Gain 最大增益

任意距离上的最大增益,范围(-96,+12),默认值是+12分贝。


Unity Gain Distance 单位增益距离

增益是0分贝的距离,单位为米,范围(0.05,无穷大),默认值是1米。


Room Size 空间大小

空间声音模拟的空间大小。大致的空间大小划分为:small(从办公室到小型会议室),medium(大会议室),lARge(礼堂)。你可以将空间大小属性设为none来模拟户外空间。默认空间大小是small。


示例:

HoloToolkit项目提供了一个静态类来实现简单的空间声音设定。这个类在HoloToolkit\SpatialSound目录下,能被项目任何脚本调用。我们推荐你给每个Audio Source都设定一遍。下面代码演示了设置Audio Source空间大小:

[代码]:

1
AudioSource
audioSource = gameObject.GetComponent<audiosource>()
2
3
if
(audioSource
!=
null
)
{
4
SpatialSoundSettings.SetRoomSize(audioSource,
SpatialMappingRoomSizes.Medium);
5
}</audiosource>


Directly Acessing Parameters from Unity 直接从Unity访问以上参数

如果你不想使用HoloToolkit提供的工具,以下则是直接修改HRTF参数的方法。你可以把以下代码复制/粘贴进SetHRTF.cs脚本中,并将此脚本附加到任何Audio Source对象上。这允许你修改HRTF插件的重要参数。

[代码]:

view
source

print?

01
using
UnityEngine;
02
using
System.Collections;
03
public
class
SetHRTF
: MonoBehaviour{
04
public
enum
ROOMSIZE
{ Small, Medium, Large, None };
05
public
ROOMSIZE
room = ROOMSIZE.Small;
//
Small is regarded as the "most average"
06
//
defaults and docs from MSDN
07
// https://msdn.microsoft.com/en-us/library/windows/desktop/mt186602(v=vs.85).aspx[/code]
08
public
float
mingain
= -96f;
//
The minimum gain limit applied at any distance, from -96 to + 12
09
public
float
maxgain
= 12f;
//
The maximum gain applied at any distance, from -96 to + 12
10
public
float
unityGainDistance
= 1;
//
The distance at which the gain applied is 0dB, from 0.05 to infinity
11
public
float
bypassCurves
= 1;
//
if > 0, will bypass Unity's volume attenuation and make a more accurate volume simulation automatically in the plugin
12
AudioSource
audiosource;
13
void
Awake()
14
{
15
audiosource
=
this
.gameObject.GetComponent<audiosource>();
16
if
(audiosource
==
null
)
17
{
18
print(
"SetHRTFParams
needs an audio source to do anything."
);
19
return
;
20
}
21
audiosource.spatialize
= 1;
//
we DO want spatialized audio
22
audiosource.spread
= 0;
//
we dont want to reduce our angle of hearing
23
audiosource.spatialBlend
= 1;
//
we do want to hear spatialized audio
24
audiosource.SetSpatializerFloat(1,
(
float
)room);
//
1 is the roomsize param
25
audiosource.SetSpatializerFloat(2,
mingain);
//
2 is the mingain param
26
audiosource.SetSpatializerFloat(3,
maxgain);
//
3 is the maxgain param
27
audiosource.SetSpatializerFloat(4,
unityGainDistance);
//
4 is the unitygain param
28
audiosource.SetSpatializerFloat(5,
bypassCurves );
//
5 is bypassCurves, which is usually a good idea
29
}
30
}</audiosource>
本文转自:52VR.com Hololens http://www.52vr.com/article-792-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: