本教程基于Unity2017.2及Visual Studio 2017
本教程编写时间:2017年12月11日

本文内容提要

立体音效给Holograms注入了生命,并将它们融入现实世界。Holograms由光影和声音组成,你看不到Holograms的时候,空间声音可以帮助你找到它们。空间声音不像你会在收音机上听到的声音,它是在3D空间中的声音。借助空间声音,可以使Holograms听起来像是在你身后,在你旁边,甚至在你的头上!在这门课程中,你将:
- 配置开发环境用以使用Microsoft Spatial Sound
- 使用立体音效来增强交互
- 将立体音效与空间映射结合
- 学会音效设计和混合的最佳实践
- 使用音效来增强特殊效果,将用户带入混合现实的世界

准备工作

  • 开发环境
  • 已完成入门篇的学习

资源下载

本文使用了官方教程的资源
原地址
如果下载有困难,百度云地址

0 创建工程

  1. 将下载资源的解压出来
  2. 打开Unitiy,选择Open,选择 HolographicAcademy-Holograms-220-SpatialSound\Starting\Decibel 目录并打开 (会提示版本不一致,点击继续即可)
  3. 在Project面板中Scenes目录下,双击打开 Decibel 场景
  4. 在Hierarchy面板中,选中HolographicCollection下的POLY,在Inspector面板中查看AudioSource组件,我们可以看到没有Spatialize复选框
    默认情况下,Unity没有加载spatializer插件,我们需要按下列步骤手动加载:

    • Edit > Project Settings > Audio
    • Spatializer Plugin 下拉菜单中选择 MS HRTF Spatializer
    • 在Hierarchy面板中,选中HolographicCollection下的POLY,在Inspector面板中查看AudioSource组件,选中Spatialize复选框
    • 拖动Spatial Blend滑条到最右端或者输入1
  5. 打开菜单File > Build Settings,选择Universal Windows Platform,点击Switch Platform按钮

  6. Target device设置为Hololens,选中Unity C# Projects
  7. 在Build Settings面板,点击Build,新建App文件夹并选择该文件夹
  8. Build完成后,打开App文件夹下的解决方案,将Debug改为Release,ARM改为x86,并选中Hololens Emulator
  9. 点击调试 > 开始执行(不调试)或者Ctrl+F5(注意:模拟器启动慢可能会引起部署超时,这时候不要关闭模拟器,直接再次Ctrl+F5即可)

1 立体音效和交互

目标

  • 使用声音增强Hologram的真实感
  • 使用声音指引用户凝视
  • 使用声音提供手势反馈

增强真实感

关键概念

  • 空间中hologram的音效
  • hologram上的音源应该被放置在合适的位置
    合适的位置取决于hologram,例如hologram是人,那么音源就应该接近嘴而不是脚。

步骤

下面的指引可以给一个hologram加上立体音效
- 在Hierarchy面板中,选中HolographicCollection下的POLY
- 在Inspector面板的AudioSource组件中,点击AudioClip边上的小圆圈,在弹出的对话框中选择 PolyHover
- 点击Output边上的小圆圈,在弹出的对话框中选择 SoundEffects
Decibel 工程使用Unity AudioMixer组件来为各组声音调整声音级别。通过这种方式对声音进行分组,可以调整总体音量,同时保持每个声音的相对音量。
- 在AudioSource中,展开3D Sound Settings。
- Doppler level设置为0。
将Doppler level设置为零可禁止由运动(Hologram或用户)引起的音高变化。多普勒的一个典型例子是快速移动的汽车。当汽车靠近静止的听众时,发动机的音高升高。当它通过听众时,音高随距离降低。

指引用户凝视

关键概念

  • 使用声音来引起对重要全息图的注意。
  • 耳朵可以帮助指导眼睛看的地方。
  • 大脑有一些学习的期望。
    学习期望的一个例子是鸟类通常在人类头上。如果使用者听到鸟的声音,他们最初的反应就是仰视。在用户的下方放置一只鸟可能让他们面对声音的正确方向,但是无法根据常识找到全息图。

步骤

以下说明使POLY可以隐藏在身后,以便您可以使用声音来定位全息图。
- 在Hierarchy面板中,选择Managers。
- 在Inspector面板中,enable Keyword Manager。
- 在Keyword Manager中,展开Keywords and Responses,然后点击Go Hide。
- 将No Function更改为PolyActions.OnSelect。

手势反馈

关键概念

  • 使用声音为用户提供正确的手势反馈
  • 不要吓到用户 - 过大的声音会吓到用户
  • 轻微的声音效果最好

步骤

  • 在 Hierarchy 面板中,展开 HologramCollection
  • 展开EnergyHub并选择Base。
  • 在 Inspector 面板中,单击Add Component并添加 Gesture Sound Handler
  • 在Gesture Sound Handler中, Navigation Started Clip 和 Navigation Updated Clip 选择 RotateClick
  • 在Hierarchy面板中,选择Managers。
  • 在 Inspector 面板中,单击Add Component并添加 Gesture Sound Manager
  • 双击 GestureSoundManager 在Visual Studio中打开

GestureSoundManager执行以下任务:
- 创建并配置一个AudioSource。
- 将 AudioSource 放置在适当的位置
- 播放与该手势关联的音频
手势与音频剪辑的关联由GestureSoundHandler.cs确定

部署

build测试一下!
部署应用程序之后:
- 当你在POLY附近移动时,观察声音如何变化。
- 说“Go hide”让POLY移动到你身后的位置。通过声音找到它。
- 凝视Energy Hub的底部。点击并向左或向右拖动旋转全息图,并注意声音如何变化。
注意:有一个显示语音命令面板会一直跟随你,让你了解语音命令是什么。

3 立体音效和空间映射

目标

  • 通过声音确认holograms和真实世界的交互
  • 让真实世界能够遮挡声音

与物理世界交互

关键概念

  • 物体通常在碰到其他表面或其他物体时发出声音。
  • 声音应该符合当前环境。
    例如,在桌子上放一个杯子应该比一块石头掉在金属上更安静。

步骤

  • 在 Hierarchy 面板中,展开“ HologramCollection”。
  • 展开EnergyHub,选择Base。
  • 在 Inspector 面板中,单击 Add Component 并添加 Tap To Place。
  • 在Tap To Place中,点击 Placement Material 旁边的圆圈,然后从弹出框选择 Wireframe。
  • 将 Placement Sound 设置为 Place
  • 将 Pickup Sound 设置为 Pickup

声音遮挡

关键概念

  • 和光一样,声音可以被遮挡
    一个典型的例子是一个音乐厅。当一个听众站在大厅外面,门关着时,音乐听起来很闷。通常音量会减小。当门打开时,会听到全部的音量。
  • 高频声音通常比低频率被吸收更多。

步骤

  • Hierarchy面板,展开 HologramCollection 并选择 POLY
  • Inspector 面板, 点击 Add Component 添加 Audio Emitter

Audio Emitter类提供了以下功能:
- 还原AudioSource的volume的任何更改
- 从用户的位置到AudioEmitter脚本附着的物体执行 Physics.RaycastNonAlloc

RaycastNonAlloc可以优化性能,因为它限制了射线的数量以及结果的返回数量
- 对遇到的任何 IAudioInfluencer,调用 ApplyEffect 方法
- 对于不再碰到的 IAudioInfluencer ,调用 RemoveEffect 方法

注意:AudioEmitter 基于真实时间更新,而不是每帧更新。这是因为人的移动速度没那么快,一般只需要每1/4或1/2秒更新即可。但是 Holograms 快速从一点移动到另一点会打破这种现象。

  • 选择HologramCollection/EnergyHub/BlobOutside物体
  • 添加 Audio Occluder 组件
  • Cutoff Frequency设置为1500(这个设置将AudioSource的频率限制在1500Hz及以下)
  • Volume Pass Through 设置为0.9(这个设置将AudioSource当前level的音量将为90%)

Audio Occluder 实现了 IAudioInfluencer 接口:
- 使用 AudioLowPassFilter 实现一种遮挡效果,AudioLowPassFilter 挂在 AudioSource上面并由 AudioEmitter 管理
- 给AudioSource加上音量衰减效果
- 通过设置中性截止频率和禁用滤波器来禁用该效果(用作中性线的频率是22 kHz(22000 Hz)。选择这个频率是因为它高于人耳可以听到的标称最大频率,这对声音没有明显的影响)

  • 选择SpatialMapping物体,添加 Audio Occluder 组件
  • Cutoff Frequency 设置为 750(当多个遮挡器在用户和音频发射器之间时,filter使用最低频率)
  • Volume Pass Through 设置为 0.75(当多个遮挡器在用户和音频发射器之间时,volume pass through数值会叠加)
  • 选择 Managers 上面的 Keyword Manager 的 Keywords and Responses
  • 将 Go Charge 的 No Function 改为 PolyActions.GoCharge
  • 将 Come Here 的 No Function 改为 PolyActions.ComeBack

编译部署

部署完成后:
- 说 “Go Charge” 让 POLY 进入 Energy Hub
注意声音的变化。应该听起来很闷,有点安静。如果您可以将自己的位置放置在墙壁或其他物体与能源中心之间,则由于现实世界的遮挡,您应该注意到声音的进一步消声。
- 说 Come Here” 让 POLY 离开 Energy Hub 并来到你面前
请注意,一旦POLY离开Energy Hub,声音遮挡将被删除。如果您仍然感到遮挡,POLY可能被现实世界遮挡。尝试移动以确保您对POLY有清晰的视线。

房间模型

关键概念

  • 空间的大小提供了不同的潜在声道,有助于声音定位
  • 每个 AudioSource都需要设置房间模型
  • MixedRealityToolkit for Unity 插件提供了设置房间模型的代码
  • 设置最符合真实世界空间的房间模型可以提高混合现实的用户体验

如果要创建虚拟现实场景,请选择最适合虚拟环境的房间模型。

4 声音设计

目标

  • 了解有效声音设计的准则。
  • 学习混音技术和指南。

声音和体验设计

本节讨论关键声音和体验设计注意事项和准则。

标准化所有声音

这样可以避免使用特殊的代码来调整每个声音的音量级别,这可能很费时并且很麻烦。

设计一个不受限制的体验

HoloLens是一个不受限制的全息电脑,用户可以在移动中使用。一定要通过走动测试音频的混合情况。

从全息图上的逻辑位置发出声音

在现实世界中,狗不会从尾巴上吠叫,人的声音也不会从他/她的脚上出来。避免让声音从Hologram的意想不到的地方发出。
对于小型Hologram,从几何中心发出声音是合理的。

熟悉的声音最容易定位

人声和音乐很容易定位。如果有人叫你的名字,你可以非常准确地确定声音来自哪个方向以及距离多远。短而陌生的声音难以定位。

了解用户的期望

生活经验在我们定位声音中很重要,这就是为什么人声特别容易定位的原因之一。放置声音时,注意用户已知的经验是很重要的。
例如,当有人听到鸟儿歌曲时,他们一般会抬头看,因为鸟儿往往在视线之上(飞行或在树上)。用户转向正确的声音方向并不少见,但是往错误的方向上看找不到holograms时会感到困惑或沮丧。

避免隐藏音源

在现实世界中,如果我们听到声音,我们通常可以识别发出声音的对象。这也应该适用于你的经验。用户听到声音,从声音的起源处看不到物体,这可能是非常令人不安的。
但是有一些例外。例如,场地中的蟋蟀等环境声音不需要可见。生活经验让我们熟悉这些声音的来源,因而不需要看到它。

声音混合

在HoloLens上将混音的音量设置为70%

混合现实体验允许在现实世界中看到全息图。真实世界的声音也应该被听到。70%的音量使用户能够听到他们周围的世界。

音量为100的HoloLens应该盖住外部声音

100的音量类似于虚拟现实体验。在视觉上,用户被传送到了到不同的世界,同时声音应该掩盖现实的声音。

使用Unity AudioMixer来调整声音的级别

在设计混音时,创建合适的分类并能修改音量是很有用的。这保留了每种声音的相对级别,同时能够对整体混音进行快速简单的更改。常见的类别包括:音效,环境音,配音和背景音乐。

基于用户的注视混合声音

根据用户正在(或不在)寻找的目标来改变混音通常是有用的。这种技术的一个常见用途是降低视野之外的hologram的音量,使用户更容易关注其前面的信息。另一个用途是增加音量,吸引用户的注意力到一个重要的事件。

建立你的混音

建立混音时,建议先从背景音开始,并根据重要性添加图层。通常情况下,这会导致每个图层比以前更响亮。
将你的混音想象成一个倒置的漏斗,底部最不重要(通常是最安静的声音),建议按照下面的图表来构建你的混音。

配音是一个有趣的情景。根据将要创建的体验,您可能希望获得立体声(非定位)或空间化的声音。两个微软的应用是优秀的例子。
HoloTour 使用立体声配音。当叙述者描述用户正在观看的位置时,声音是一致的,并且不会根据用户的位置而变化。这使得叙述者能够描述场景而不会从环境的立体声音中消失。
Fragments以侦探的形式利用立体音效。侦探的声音被用来帮助使用者注意一个重要的线索,就好像一个真实的人在房间里一样。这使我们能够更深入地融入解决这个谜团的经历中。

性能

CPU占用

使用空间声音时,10 - 12个发射器将消耗大约12%的CPU。

流加载长音频文件

音频数据可能很大,特别是在普通采样率(44.1和48 kHz)下。一般的规则是,音频文件长度超过5 - 10秒应该流式传输,以减少应用程序内存的使用。
在Unity中,您可以在文件的导入设置中标记用于流式传输的音频文件。

特殊效果

目标

  • 将深度添加到“Magic Windows”。
  • 将用户带入虚拟世界。

Magic Windows

关键概念

创建视图到一个隐藏的世界,在视觉上引人注目。
当全息图或用户接近隐藏的世界时,通过添加音频效果增强真实感。

步骤

  • Hierarchy面板中选择HologramCollection/Underworld/VoiceSource物体
  • 添加 User Voice Effect 组件,AudioSource 组件也会被自动添加
  • AudioSource中,Output 设置为 UserVoice (Mixer)
  • 勾选 Spatialize
  • 将 Spatial Blend 滑条拖拽到最右端(3D)或者直接输入1
  • 展开3D Sound Settings,Doppler Level 设为 0
  • User Voice Effect中,Parent Object属性设置为场景中的 Underworld
  • Max Distance 设为 1 (设置“ 最大距离”告诉用户音色效果启用效果之前用户必须与父对象有多接近)
  • 展开 Chorus Parameters, Depth 设为 0.1,
    Tap 1 Volume, Tap 2 Volume 和 Tap 3 Volume 设为 0.8,Original Sound Volume 设为 0.5

上述 AudioChorusFilter 的相关参数设置增加的用户声音的丰富性
- User Voice Effect中,展开Echo Parameters,Delay 设置为 300,Decay Ratio 设置为 0.2,Original Sound Volume 设置为 0

上述 AudioEchoFilter 的相关参数设置让用户的声音有回音

User Voice Effect 脚本负责:
- 测量用户和脚本所在的GameObject之间的距离。
- 确定用户是否面向GameObject(无论距离如何,用户都必须面对GameObject才能启用效果)
- 应用和配置AudioChorusFilter和AudioEchoFilter到AudioSource。
- 通过禁用过滤器来禁用该效果。

User Voice Effect 使用了 Mic Stream Selector 组件, 该脚本来自 MixedRealityToolkit for Unity, 录制高质量的音频流并传到Unity的音效系统

  • Hierarchy 面板中, 选择 Managers 上的 Keyword Manager,展开Keywords and Responses
  • Show Underworld中的 No Function 改为 UnderworldBase.OnEnable
  • Hide Underworld中的 No Function 改为 UnderworldBase.OnDisable

编译部署

部署应用程序之后:
- 面对一个平面(墙,地板,桌子),并说 Show Underworld
underworld将显示,所有其他holograms将被隐藏。如果你没有看到Underworld会,确保你正面向真实世界的表面。
- 在underworld hologram 1米内,开始讲话。
会有音频效果加到你的声音上!
- 远离 underworld hologram,效果会消失。
- 说 Hide Underworld 来隐藏underworld hologram。
underworld hologram将隐藏,以前隐藏的全息图将重新出现。


洪流学堂,最科学的Unity3d学习路线,让你快人一步掌握Unity3d开发核心技术!

[洪流学堂]Hololens开发高级篇4:立体音效(Spatial sound)相关推荐

  1. [洪流学堂]Hololens开发高级篇5:空间映射(Spatial mapping)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月16日 本文内容提要 空间映射让holograms了解周围环境,将真实世界和虚拟世界更好地结合在 ...

  2. [洪流学堂]Hololens开发高级篇3:语音(Voice)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月8日 本文内容提要 设计语音命令并针对Hololens语音引擎优化 让用户知道可以用什么语音命令 ...

  3. [洪流学堂]Hololens开发高级篇2:手势(Gesture)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月7日 本文内容提要 当跟踪到用户的手时提供反馈 使用导航手势旋转hologram 当用户的手要离 ...

  4. [洪流学堂]Hololens开发高级篇1:凝视(Gaze)

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月5日 本文内容提要 用户凝视hologram时,光标和hologram都会发生变化 加入一些瞄准 ...

  5. [洪流学堂]Hololens开发入门篇3:使用基本功能开发一个小应用

    本文首发于"洪流学堂"公众号. 洪流学堂,让你快人几步 本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月4日 本文内容提要 ...

  6. [洪流学堂]Hololens开发入门篇2之Hello World

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年11月29日 如果你还没有配置好开发环境,请看[洪流学堂]MR开发之Hololens开发:入门篇1之模 ...

  7. [洪流学堂]Hololens开发入门篇1之模拟器开发环境配置

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年11月27日 视频教程 本教程入门篇的视频课程也已经上线 看视频教程,细节无遗漏哦~ https:// ...

  8. [洪流学堂]Hololens开发:Unity3d与Visual Studio最佳实践

    本教程基于Unity2017.2及Visual Studio 2017 本教程编写时间:2017年12月7日 Hololens开发:Unity3d与VS最佳实践(best practices) 使用U ...

  9. Hololens开发入门篇-郑洪智-专题视频课程

    Hololens开发入门篇-572人已学习 课程介绍         本课程使用Hololens模拟器,基于Unity2017.2及Visual Studio 2017开发 课程收益     学会Ho ...

最新文章

  1. cvelist.jsp
  2. 在OpenCV中怎样测量代码的运行时间?
  3. 动态规划之一最长上升子序列LIS
  4. leetcode 121 股票买卖问题系列
  5. CV《物体识别与检测4 - 人脸验证》
  6. C++ Protected和Private的区别
  7. 让搜索显示中文的方法
  8. 吴恩达|机器学习作业5.0.偏差与方差
  9. js Object.is 相等判断
  10. newifi3刷机 php,【超强信号】新路由3newifi3专用超强信号老毛子PADAVAN固件新路由3newifi3超强信号eeprom下载...
  11. 推荐系统(十八)Gate网络(一):新浪微博GateNet
  12. 【蓝桥杯】枚举,模拟,排序专题 (一)
  13. Python学习笔记:part 1
  14. IDEA2021.1webservice远程接口调用client相关配置【已解决】【简单高效】
  15. 高效程序猿的狂暴之路
  16. 了解前端工程化之组件化——Vue组件
  17. win10/win11系统安装Tensorflow-GPU
  18. 三菱四节传送带控制梯形图_三菱plc控制传送带三级 编程 fx2n 模拟四节传送带控制实验三菱...
  19. OpenSSL中的EVP接口
  20. 性格测试软件帖子,全球最权威的性格测试

热门文章

  1. 3-Spring Boot的数据访问
  2. 国三计算机考试难度大吗,报考计算机技术在职研考试科目多吗考试难度大吗需要有计算机国三基础吗...
  3. android 支付宝月账单 统计图_支付宝年度账单也太敷衍了!
  4. socket io 不使用redis_为什么Redis单线程能够达到数十万、百万级的QPS?
  5. python 描述器 详解_描述器使用指南
  6. yii2 nginx php配置,求助-yii2在nginx上的rewrite配置
  7. oracle运行产生的日志在哪里,运行临时表,是否有日志产生
  8. python writerow参数_csv文件的输出结果TypeError writerow()接受2个位置参数,但给出了5个...
  9. sql调优的几种方式_「数据库调优」屡试不爽的面试连环combo
  10. python数据可视化的特点_python的数据分析到底是啥?python数据可视化怎么做?