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

如何在Unity中添加三维空间声音Spatial Sounds相关推荐

  1. 如何在3dmax中添加声音轨道?

    如何在3dmax中添加声音轨道? 如何在3dmax中添加声音轨道?3dsMax是一个三建模.动画和渲染软件.借助3dsMax,我们可以创造一个宏伟的游戏世界,安排精彩的场景,实现设计的可视化,创造身临 ...

  2. 如何在unity中制作塔防游戏

       塔防游戏非常流行,毫无疑问--没有什么比看着自己的防御消灭讨厌的侵略者更让人满足!在这两部分教程中,用unity来制作一个塔防游戏! 将会学习怎样...... 创建一波敌人 让它们跟随线路点 ...

  3. 如何在Unity中使用WebXR开发AR/VR应用

    WebXR是一种具有巨大潜力的技术,但是目前,它提供的开发工具比独立VR开发差得多,在独立VR开发中,我们使用Unity和Unreal Engine.Mozilla 为沉浸式Web做了大量工作,为Un ...

  4. unity 2019 点击脚本启动不了VS_如何在Unity中使用WebXR开发AR/VR应用

    WebXR是一种具有巨大潜力的技术,但是目前,它提供的开发工具比独立VR开发差得多,在独立VR开发中,我们使用Unity和Unreal Engine.Mozilla 为沉浸式Web做了大量工作,为Un ...

  5. unity editor android 黑屏_如何在Unity中利用nReal制作AR应用

    来源:新浪VR nReal眼镜是今年最有趣的增强现实小工具之一.它们已经在CES上展示过了,几个月前笔者在北京亲自试用过,在我的评测中,我强调了它们不仅非常轻.时尚,而且还能提供非常明亮的全息视图. ...

  6. 如何在SharePoint2010中添加Deep Zoom Image

    如何在SharePoint2010中添加Deep Zoom Image 应用范围 SharePoint 2010 Foundation:SharePoint 2010 Standard:SharePo ...

  7. 怎样在计算机上插入机构图,Win7系统如何在excel中添加word文档结构图?

    今天小编给大家分享 Ghost Win7系统 在excel中添加word文档结构图的方法,有时候在编辑excel表格时,为了数据能够更加直观展示,会在excel中添加word文档结构图,这样显示的内容 ...

  8. echart 实例显示位置_技术分享:如何在Unity中使用实例化渲染?

    编者按 在日常开发中,通常说到优化.提高帧率时,总是会提到批量渲染.之前简单总结了静态合批(点此查看全文)以及动态合批(点此查看全文),这次作者将和大家聊聊实例化渲染. 作者:枸杞忧天 (本文内容由公 ...

  9. java soap 头_如何在Java中添加Soap标头

    我有一个来自oracle的NO.net Web服务,要访问,我需要添加soap标头.如何在Java中添加soap标头? Authenticator.setDefault(new ProxyAuthen ...

最新文章

  1. Android通过Chrome Inspect调试WebView
  2. Aix netstat命令解析
  3. es6学习 -- 解构赋值
  4. 从玉农业蔬菜标准化-林裕豪:致力食品安全和质量管理体系
  5. ywy_c_asm题
  6. malloc/free 和 new/delete
  7. 华为C8825D刷机失败解决方法
  8. SQL SERVER2008判断文件夹是否存在并创建文件夹
  9. 关闭windows hello然后尝试再次运行安装程序_蜂鸟E203系列——Windows下运行hello world例程...
  10. 让手机重现“一律允许使用这台计算机进行调试”确认窗口
  11. RDMA的原理、传输与Verbs
  12. Kopernio插件+SCI-HUB最新可用网址
  13. 1461错误,nbsp;mysql_stmt_prepa…
  14. LeetCode Image Smoother
  15. 招聘 | 胡传鹏博士课题组招硕士、博士
  16. 马化腾微信朋友圈惋惜小黄车 网友们狂赞 并替Pony搞起情怀大接龙
  17. 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8组件结构全解析
  18. 4D毫米波雷达算法设计2--传统算法详细设计
  19. 在Mac上如何快速找到及打开应用程序
  20. HarmonyOS JS UI

热门文章

  1. 解决python2.x文件读写编码问题
  2. ssh暴力破解解决方案
  3. NSOperation vs大中央派遣
  4. 如何使用Node.js获取当前脚本的路径?
  5. Oracle分析函数巧妙使用
  6. 如何搭建一个功能复杂的前端配置化框架(一)
  7. 影响系统性能的几个原因
  8. Mac环境下sublime实现列选择或编辑的方法
  9. tunctl used bridge sub interface network used with multi-network env
  10. 详解Pattern类和Matcher类