自从 Unity 5.0 开始,音频数据就已经和实际的音频文件分离了. AudioClips 仅仅引用包含音频数据的文件,在AudioClip导入器中有各种选项组合来决定音频在运行时是如何加载的. 这意味着你有很大的灵活性来决定哪些音频文件应该一直保存在内存中 (因为你可能无法预测它在游戏中播放的频率和速度, i.e. footsteps, weapons and impacts), 而其他的资产可能会随玩家的需求而加载,或随着玩家在关卡中的进展而逐渐加载(如演讲,背景音乐,氛围循环等)。
当音频在unity中编码时,它存储在硬盘上的格式包括 PCM, ADPCM or Compressed. 除此之外,还有一些平台特定的格式,默认的格式是 Compressed, 在 standalone 和 mobile platforms平台上通过Vorbis/MP3格式压缩, PS Vita 和Xbox One 采用HEVAG/XMA 压缩格式
任何导入unity中的音频都可以在脚本中作为AudioClip访问到. 甚至可以在音频数据加载之前就能访问到音频数据的信息. 因为在加载音频文件的时候,就已经能够获得一些信息了,比如从编码的音频数据中获取length, channel count and sample rate ,并把这些存储在 AudioClip中. 例如,这在创建自动对话或音乐排序系统时非常有用,因为音乐引擎可以使用长度信息,在音乐加载完成之前调度音乐的播放 ,它还可以通过只在需要的时候在内存中保存一次以减少内存的占有率
Tracker Modules
Tracker Modules (音轨模块)
包含高质量的 PCM 采样,来保证所有的硬件听起来效果都一样
支持 Impulse Tracker (.it), Scream Tracker (.s3m), Extended Module File Format (.xm), and the original Module File Format (.mod).这四种格式
Tracker module 和主流的 PCM 格式(.aif, .wav, .mp3, and .ogg) 的区别在于,文件不仅小,音质也好.这适用于需要大量音乐的游戏
目前主流的音轨编辑工具Tracker Modules 比如 OSX的 MilkyTracker ,OpenMPT for Windows. For more information and discussion, please see the blog post .mod in Unity from June 2010.
Audio Mixer
Unity Audio Mixer 可以混合调节多个 audio sources
Audio Mixer Window
Audio Mixer的显示窗口基本上是一个Audio Mixer Groups的树,一个 Audio Mixer group本质上是音频的混合 , 来控制音频的音调,音量; 能够改变音频的最终的效果. 还有一个发送和返回机制来将结果从一个总线传递到另一个总线。
The Audio Mixer
An Audio Mixer 也是一个资源 asset. 可以创建一个或者多个,且在同一时间激活多个. 一个Audio Mixer 包含一个master group. 也可以添加其它组来组成mixer的结构.
在Audio Mixer中,它里面的分支代表着一个效果,这个效果应用到特定的音频上,把一个 Audio Source的输出结果放到一个group里面,这些效应将被应用到那个音频上
Audio Mixer 的输出结果也能导入其它的 Audio Mixer中的任意 group 中 ,在场景中你可以给这些Audio Mixer编个号,来规划结果传递的路线
Snapshots
可以把一个组内的所有参数设置放到一个snapshot里面.如果你有一个 snapshots的列表,你可以在游戏中让他们互相切换,来营造不同的氛围,snapshot(快照),也就是预先设定好的值
Ducking
Ducking 允许您根据另一个组中正在发生的事情来更改一个组的效果.一个例子是在其他事情发生时降低背景声。
An overview of the concepts and AudioMixer
AudioMixer 是一个资源asset,可以被 AudioSources 引用,通过audiosource中的audioclip用来实现复杂的声音混合
DSP 效果和其它 audio mastering concepts 可以应用到音频信号上
AudioMixer View
- The Asset - 包含所有的AudioGroups 和AudioSnapshots 作为子层级
- The Hierarchy view - 它包含AudioMixer中AudioGroups的整个混合层次结构
- The Mixer Views -这里面缓存 mixer的可见设置列表. 每个视图仅在main mixer window主混合窗口中显示整个层次结构的一个子集合。
- Snapshots -这是一个AudioMixer资产中的所有AudioSnapshots的列表. Snapshots捕获所有在AudioMixer中的参数设置状态,并且能够在运行时切换
- The Output AudioMixer -可以将AudioMixers规划到其他AudioMixers的AudioGroups中.这个属性可以单独定义一个 output AudioGroup 然后把这个AudioMixer的音频效果导入进去,也就是AudioMixer可以嵌套
- AudioGroup Strip View - 展示的是一个 AudioGroup的视图,包括当前的 VU 等级, 音量attenuation (volume) 设置, Mute, Solo and Effect Bypass 设置和 这个组的DSP effects 效果
- Edit In Play Mode - 这是按钮允许你在播放模式下编辑AudioMixer,或者防止编辑并允许游戏运行时控制AudioMixer的状态。
- Exposed Parameters - 这是一个 Exposed Parameters列表 ( AudioMixer 的任意参数可以通过一个string 名字暴露出来,然后让脚本访问) and 相应的字符串名称.
AudioMixer Inspector
- The Pitch and Ducking 音高设置在所有 AudioGroups的上面.
- An example Send Effect, positioned before where the attenuation is applied.
- 衰减(音量设置)是在这里为一个音频组完成的. 衰减可以应用在效果叠加的任何地方. The VU meter here shows the volume levels at that point in the effect stack (different from the VU meters shown in the AudioMixer view which show the levels of the signal as it leaves the AudioGroup.
- An example effect with parameters, in this case a Reverb. Parameters can be exposed by right clicking on them and choosing to expose them.
Concepts
Routing and Mixing
http://en.wikipedia.org/wiki/Audio_mixing
音频传送是接收若干输入音频信号并输出1个或多个输出信号的过程。这里所说的信号是指连续的数字音频数据流,它可以被分解成数字音频通道(如立体声或5.1(6通道))。
在内部,通常有一些工作对这些信号正在做,如混合,应用效果,衰减等。由于各种原因,这是音频处理的一个重要方面,这就是设计AudioMixer的目的。
除了发送和返回之外(稍后将介绍),AudioMixer包含允许任意数量输入信号的AudioGroups,混合这些信号并只有一个输出
在Unity的之前版本中,没有音频混合这个概念,玩家通常会在场景中放置各种Audio source,然后播放各种音频,他们是正交的混合在一起
AudioMixers 在 AudioSource 和 AudioListener之间,在这之间你可以执行混合操作,然后输出的时候就像一个声音
Mixing and routing 允许你把声音进行分类,然后根据类别调整相应的效果
对于与空间相关联的声音,因为这个是和场景相关的,根据与音频源的距离决定声音的衰减,与AudioMixer中的类别无关,所以在AM中的效果应用到Audio source上,而不是最终混合的输出音频上
声音的分类,目的是为了给不同种类的声音添加不同的效果,比如背景音和游戏声音
比如:
- 对一组环境音降低音量
- 凡是在游戏中水下的声音使用低通滤波器
- 减弱游戏中除菜单音乐和交互声音外的所有声音。
- 减少游戏中所有的枪声和爆炸声的音量,以确保你能听到NPC的谈话。
- etc…
这些类别都是特定于游戏的,并且在不同的项目中有所不同,但这种分类的一个例子可能会被描述如下;
- 所有声音传递进“Master” AudioGroup
- 在Master group中,根据声音分类,有 Music, Menu sounds and all game sounds
- game sounds group又分为NPCs, environmental sounds ,foley sounds(gunshots and footsteps)
- 这些类别将根据需要进一步细分
分级图如下:
在游戏中混合声音可以产生更好的游戏氛围,突出主题,比如在山洞里,把其它声音的音量都降低
通过适用 snapshots (explained later) 也能产生很好的氛围,增强沉浸式体验
Snapshots
Snapshots 能够捕捉一个 AudioMixer的状态,然后随着游戏的进展,在彼此之间相互转换,从而营造不同的氛围
Snapshots capture the values of all of the parameters within the AudioMixer;
- Volume
- Pitch
- Send Level
- Wet Mix Level
- Effect Parameters
将Snapshots 和游戏逻辑相结合可以创造出很多效果
Specifics on the AudioMixer window
Mixers Panel
The Mixers Panel展示了一个项目中所有的 AudioMixers .通过选择,可以快速地切换 AudioMixers . 把一个 AudioMixer 传递进另一个AudioMixer 的AudioGroup 里面,也是在这个面板中执行
点击加号,添加一个新的 AudioMixers in the project my clicking the ‘+’
Routing AudioMixers into other AudioMixers
unity支持多个AM,默认,每个AM的输出音频到audio listener,开发人员还可以将一个AM的输出,传递到另一个AM的AG里面
有两种方法,一种是在Mixers面板的编辑器中,另一种是在运行时使用AudioMixer API动态实现。
- 要在编辑器中更改一个AudioMixer的输出,只需单击Mixers面板中的一个AudioMixer,并将其拖动到另一个AudioMixer的顶部。
- 您将看到一个对话框,允许您选择要传递到的目标AudioMixer的AudioGroup.
- Once you select an output AudioGroup, the panel will show the parenting relationship of the AudioMixers. It will also show the target AudioGroup next to the AudioMixers name.
Hierarchy Panel
在hierarchy视图中,可以定义声音类别和混合结构。如上所述,它允许您定义自己的自定义类别,AudioSources可以连接到这些自定义类别并进行播放
Adding and Configuring AudioGroups within the Hierarchy
这里面每一个层级都是一个AG组,你可以拖拽来改变组的层级,删除,添加,重命名组
AudioGroup View
The AudioGroup View 展示了 AudioMixer中AudioGroups的相互调用关系.
每一个 AudioGroup都是一个条状 “strip”.
vertical VU meter 代表当前音频的音量等级 AudioGroup. 下面表示最小音量,以分贝表示
接下来有三个按钮:
- Solo - 只播放当前的音频
- Mute - 静音
- Bypass -是否启用下面的音频效果(点击代表禁用效果)
一个 AudioGroup 包含一个 DSP Effect列表和一个 Attenuation 效果. attenuation 效果可以应用到音频的任何地方,允许你在特定的音频阶段实现衰减,这对非线性播放的音频非常有用
每一个效果槽有以下功能:
- 一个是该效果的名字
- 左边有一个圆圈,可以启用或关闭该效果
- 右键点击效果,选择“Allow Wet Mixing”, 下面会有一个彩色条 ,表示通过这个效果传递的wet signal 的数量
- 效果可以拖拽,来定义他们的顺序
Snapshot Panel
Snapshot Panel 允许你创建,在不同的snapshots之间转换,调节.至少有一个活跃的 snapshot
Snapshots 也是AudioMixer的子层级,这样就可以在脚本中访问到.
.
你还可以定义一个‘Start Snapshot’ (在它的右边有一个星星的图标). 这表示这个Start Snapshot 会在AM初始化的时候加载,比如场景开始的时候,右键可以设置开始snapshot
Views Panel
Views 可以在AM中创建可见的 AudioGroups , 使用视图,您可以在AudioMixer中创建感兴趣的透视图, 而不是总是呈现完整的层次结构. Views 纯粹为工作流优化的目的是不影响运行时设置或性能.
和 Snapshot Panel一样, 总有一个 view 被选择,显示当前 AudioGroup View. 默认所有的 AudioGroups都可见,视图中包含的内容由层次结构面板中的眼睛图标控制。
The ‘Eye’ Icon of an AudioGroup
每一个 AudioGroup 在左边都有一个眼睛图标. This icon serves 2 purposes;
- 单击眼睛图标切换当前选定view中此AudioGroup的可见性.
- 右击眼睛图标可以让你选择范围内的颜色来标记这个音频组. 设置“No Colour”颜色,就是给AG打个标签,更好标记
AudioGroup Inspector
下面表示当前AG的名字和所属的父AG
齿轮菜单包含以下功能:
- ‘Copy all effect settings to all snapshots’ - 这允许您将这个AudioGroup的所有效果参数、音量和音高设置复制到AudioMixer中出现的所有其他快照。这让你可以快速为这个音频组创建所有的快照。
- ‘Toggle CPU usage display’ - 查看每种效果消耗的CPU性能
Edit in Playmode
在播放模式下也可以编辑,默认是不可以编辑的(播放的时候才会出现)
在播放模式下修改的参数可以实时写入到snapshot,并在播放模式下直接开始对当前快照进行编辑.
Pitch Slider
表示音频的音高.
Attenuation Unit(衰减)
每一个 AudioGroup 都有一个 1 Attenuation Unit. 且不与其它AG的该效果混合
当和 Sends / Receives 一起使用时,会产生很好的效果,and non linear DSP effects. Attenuation范围是 –80dB (静音) and 到 +20dB.
每一个Attenuation Unit 都有一个 VU meter. 它显示了该音频信号的等级 audio signal levels . 意味着如果你有 DSP effects 或者在Attenuation Unit之后接收到Receives ,这意味这在条状面板上的信息和在属性面板上的信息会不一样 ,因为条状面板上的是处理之后的效果,这可以通过拖动AU的顺序,来查看不同的处理结果
Effect Units
效果空间,控制应用于音频的效果. Effect Units 还可以处理从 Send Unit发送过来的侧链信息. 每一个 Effect Unit 的参数是不同的
Unity提供了一个内置的效果集合,你可以在一个AudioGroup中使用。也有能力创建自定义DSP效果插件,可以在AudioMixer中使用
Send Units
Sends 允许您分流音频信号流,并发送一个Attenuation Unit信号副本,以作为另一个效应单元内的侧链使用, for example, a side-chain compressor. 可以在信号链上任意插入Sends ,允许分流信号
最初,当Sends被添加到AudioGroup时,它们不会发送任何东西, Send Level 设置为 80dB. 要发送到另一个效果单位Effect Unit,你必须已经有一个效果单位Effect Unit,可以接受side-chain信号. 一旦选择了目标效果单元,你需要增加send level,来传递信号
- 要将发送连接到另一个效果单元(能够接收信号),请在发送单元检查器中的下拉菜单中选择目标。
使用“发送级别”设置发送到目的地的信号级别
Receive Units
Receives是Sends的信号接收器, 接收从Sends发送的信号,和当前的信号混合起来,可以跨组传递,也可以本组传递,以用于整个组或单个组
Note 如果你独奏 Solo 一个 Receive unit,这将使声音停止播放。这是设计好的。
Duck Volume Units
Duck Volume Units 可以为从Sends发送过来的信号生成一个 side-chain compression. Duck Volume 能够在适合的点控制音量衰减
Duck Volume Units 和 Send 组合起来比较有用
Wet Mixing
Allowing Wet Mixing 允许你决定最终有多少音频效果影响音频.开启 Wet Mixing effectively 在效果周围创建一个 dry channel . 然后在效果上右键,来决定该效果的程度. 其余的信号通过干燥通道。下图说明了这个概念:
当你想控制效果的程度时,使用Wet mixing 不错
Exposed Parameters
Exposed Parameters 允许你绕过 Snapshot 系统,并从脚本中设置AudioMixer中的任何参数的值. 当通过脚本设置一个 Exposed Parameter , 该参数被锁定到该值,并且在游戏转换Snapshots时不会改变
Exposing a parameter 把在效果属性面板上的参数,右键选择‘Expose X to script’,这样就可以在脚本中访问了
一旦一个参数被公开,它将出现在AudioMixer窗口右上角的公开参数下拉菜单中. 单击此下拉菜单将显示AudioMixer中所有暴露的参数
- AudioMixer API. 是根据参数的名字来访问的
Transition Overrides
当不同的 Snapshots之间转换时,默认是从初始值线性变换到目标值的, 然后有时不想要线性变化,比如:想要在转变开始或者结束时, 想要一个 brick-wall 的变化趋势
AudioMixer中所有可用的参数都可以改变它们的变化方式. 转换方式是以snapshot来定义的
设置当前snapshot的转换方式,右击当前效果的参数
AudioMixer Inspector
AM作为一个asset, 如果AM中有audio source提供音频,AM就是激活状态的. 因为 mixers 也可以通过场景视图中音频按钮来关闭,它和场景中的游戏物体关闭不一样,所以 a mixer 甚至在停止播放状态下也是激活状态active (也会消耗 CPU)
为了避免过多的消耗CPU资源,在一个项目中尽量不要同一时间运行很多mixer(比如,因为特定的场景要使用特定的mixer), audio mixers 有内置的功能,当所有处理过程停止的时候,使自己处于暂停状态have functionality built-in to put themselves into suspended mode in which all processing stops. 要自然的做到这一点,需要采取以下步骤:
只要任何音频源在混音器中播放,或者混音器从其他子混音器接收音频数据,混音器就会一直处于活动状态,在最后一个声源完成播放后,混频器将等待一秒钟,然后在自己的输出中不断使用音量测量,以决定是否应该挂起自己. 这是必要的,因为混响和回声声音衰减的非常缓慢. 要做到这一点,需要勾选suspend复选框,然后下面的滑动条是最后声音检测的阈值. 默认是-80db,低于这个值就挂起mixer,一般要调高一些,避免可能出现的CPU适用峰值