HoloLens开发手记 - Unity之Spatial Sounds 空间声音
本文主要讲述如何在项目中使用空间声音特性。我们主要讲述必须的插件组件和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空间大小:
AudioSource audioSource = gameObject.GetComponent<AudioSource>()
if (audioSource != null) {
SpatialSoundSettings.SetRoomSize(audioSource, SpatialMappingRoomSizes.Medium);
}
Directly Acessing Parameters from Unity 直接从Unity访问以上参数
如果你不想使用HoloToolkit提供的工具,以下则是直接修改HRTF参数的方法。你可以把以下代码复制/粘贴进SetHRTF.cs脚本中,并将此脚本附加到任何Audio Source对象上。这允许你修改HRTF插件的重要参数。
using UnityEngine;
using System.Collections;
public class SetHRTF : MonoBehaviour {
public enum ROOMSIZE { Small, Medium, Large, None };
public ROOMSIZE room = ROOMSIZE.Small; // Small is regarded as the "most average"
// defaults and docs from MSDN
// https://msdn.microsoft.com/en-us/library/windows/desktop/mt186602(v=vs.85).aspx
public float mingain = -96f; // The minimum gain limit applied at any distance, from -96 to + 12
public float maxgain = 12f; // The maximum gain applied at any distance, from -96 to + 12
public float unityGainDistance = ; // The distance at which the gain applied is 0dB, from 0.05 to infinity
public float bypassCurves = ; // if > 0, will bypass Unity's volume attenuation and make a more accurate volume simulation automatically in the plugin
AudioSource audiosource;
void Awake()
{
audiosource = this.gameObject.GetComponent<AudioSource>();
if (audiosource == null)
{
print("SetHRTFParams needs an audio source to do anything.");
return;
}
audiosource.spatialize = ; // we DO want spatialized audio
audiosource.spread = ; // we dont want to reduce our angle of hearing
audiosource.spatialBlend = ; // we do want to hear spatialized audio
audiosource.SetSpatializerFloat(, (float)room); // 1 is the roomsize param
audiosource.SetSpatializerFloat(, mingain); // 2 is the mingain param
audiosource.SetSpatializerFloat(, maxgain); // 3 is the maxgain param
audiosource.SetSpatializerFloat(, unityGainDistance); // 4 is the unitygain param
audiosource.SetSpatializerFloat(, bypassCurves ); // 5 is bypassCurves, which is usually a good idea
}
}
HoloLens开发手记 - Unity之Spatial Sounds 空间声音的更多相关文章
- HoloLens开发手记 - Unity之Spatial mapping 空间映射
本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射功能的支持,通过以下两种方式提供给开发者: HoloToolkit项目中你可以找到空间映射组件,这可以让你便捷快速地开始使 ...
- HoloLens开发手记 - Unity之World Anchor空间锚
World Anchor空间锚提供了一种能够将物体保留在特定位置和旋转状态上的方法.这保证了全息对象的稳定性,同时提供了后续在真实世界中保持全息对象位置的能力.简单地说,你可以为全息物体来添加空间锚点 ...
- HoloLens开发手记 - Unity development overview 使用Unity开发概述
Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...
- HoloLens开发手记 - Unity之摄像头篇
当你穿戴好HoloLens后,你就会处在全息应用世界的中心.当你的项目开启了"Virtual Reality Support"选项并选中了"Windows Hologra ...
- HoloLens开发手记 - Unity之Recommended settings 推荐设置
Unity提供了大量的设置选项来满足全平台的配置,对于HoloLens,Unity可以通过切换一些特定的设置来启用HoloLens特定的行为. Holographic splash screen 闪屏 ...
- HoloLens开发手记 - Unity之Persistence 场景保持
Persistence 场景保持是HoloLens全息体验的一个关键特性,当用户离开原场景中时,原场景中全息对象会保持在特定位置,当用户回到原场景时,能够准确还原原场景的全息内容.WorldAncho ...
- HoloLens开发手记 - Unity之场景共享 Shared holographic experiences in Unity
佩戴HoloLens的多个用户可以使用场景共享特性来获取集合视野,并可以与固定在空间中某个位置的同一全息对象进行交互操作.这一切是通过空间锚共享(Anchor Sharing)来实现的. 为了使用共享 ...
- HoloLens开发手记 - Unity之Tracking loss
当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss.默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户.当设备重新能追踪到位置时,闪屏图 ...
- HoloLens开发手记 - Unity之Gaze凝视射线
凝视是HoloLens首要输入方式,形式功能类似于桌面系统的光标,用于选择操作全息对象.然而在Unity中并没有明确的Gaze API或者组件. 实现Gaze Implementing Gaze 概念 ...
随机推荐
- 返回顶部 和ico标题图片的制作
<link rel="shortcut icon" href="bitbug_favicon.ico">---比特虫ico网页快速制作<tit ...
- Buffer篇
// var buf1 = new Buffer(26);/*返回一个新的buffer对象,这个新buffer和老buffer公用一个内存.但是被start和end索引偏移缩减了.(比如,一个buff ...
- MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数
安装MySQL时,有warning: [root@localhost mysql]# scripts/mysql_install_db --user=mysql Installing MySQL sy ...
- SQL Server 2008 R2——VC++ ADO 操作 存储过程
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- proxool详细配置
proxool详细配置 博客分类: Java 配置管理SQLServletprototypeXML proxool一个数据库连接池框架,提供了对你选择的其它类型的驱动程序的连接池封装.可以非常简单的 ...
- SSL certificate problem unable to get local issuer certificate解决办法
SSL certificate problem unable to get local issuer certificate 解决办法: 下载:ca-bundle.crt 将它放在自己的wamp或者x ...
- 如何快速开发出一个高质量的APP——创业谈
[起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括iOS,Android, 先,呵呵,一下, 大概预估了一 ...
- jQuery对象与dom对象的区别与相互转换
什么是jQuery对象? 就是通过jQuery包装DOM对象后产生的对象.jQuery对象是jQuery独有的,其可以使用jQuery里的方法.例如: $("#test").htm ...
- UESTC 881 神秘绑架案 --二维DP
LRJ黑书上的例题. 化简均方差公式: 均值的平方一定,所以只需让矩形的总分的平方和最小即可. 定义:dp[k][x1][y1][x2][y2],以(x1,y1)为左上角坐标,(x2,y2)为右下角坐 ...
- Codeforces Round #275 Div.1 B Interesting Array --线段树
题意: 构造一个序列,满足m个形如:[l,r,c] 的条件. [l,r,c]表示[l,r]中的元素按位与(&)的和为c. 解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的 ...