Unity声音-音源

2017年03月06日 14:02 0 点赞 0 评论 更新于 2017-05-09 11:45
Unity声音-音源

一、音源概述

音源组件(AudioSource)可被视作场景中特定位置的发声装置,类似于现实中的喇叭,其作用是播放音频片段(Audio Clip)。发出的声音会输出到声音监听器(audio listener)或者声音混淆器(audio mixer)。通常,相机会默认自带一个AudioListener组件。这意味着在一个存在默认相机的场景中,我们只需添加一个音源并设置好要播放的音频片段,就能实现播放操作。而听到的声音强弱和效果则由后续会详细解释的参数决定。

音源能够播放任意类型的音频片段(Audio Clip),并且可以配置为2D音源、3D音源或者2D与3D的混合形式(Spatial Blend,即空间混合,后续会详细说明)。声音可以通过多个扬声器输出,以模拟立体声效果,甚至能模拟出7.1声道的立体声。7.1声道系统的主要作用是在听者周围构建一套前后声场相对平衡的声场。

声音还能在3D和2D之间进行空间混合变换,这种变换可通过距离上的衰减曲线来控制。此外,如果声音监听器(listener)处于一个或多个回音区域(Reverb Zones)内,音源会同时产生回音。同时,我们也可以对音源应用一些特殊的音频滤波器,以获得更丰富的音效体验,具体解释可查看音频效果文档(Audio Effects)。

二、AudioSource组件属性参数

属性名称中文名称功能解释
Audio Clip音频片段指向即将播放的音频片段(Audio Clip)。
Output音源输出可以输出到音频监听器(AudioListener)或者(AudioMixer)。当设置为空时,代表输出到AudioListener;设置到AudioMixer时,需要指定具体的AudioMixer
Mute是否静音即音源继续播放,但处于静音状态。与关闭音源不同,恢复时播放进度不同。在游戏中,音效暂停建议使用此功能,因为它不会卸载声音数据,能及时播放。音效通常数量多、占用内存小,使用静音可让画面快速响应,并能立刻恢复当前音效。暂停音乐可使用AudioSourcePauseStop或者GameObjectenable。一般不需要及时响应时,可使用Stop,它会卸载音频数据以节省内存。当然,如果内存充足,也可使用其他方式。需注意Mute与其他方式的区别:Mute的音源仍在播放,只是听不到;Pause是播放暂停;Stop是完全停止,恢复时将从头播放。
Bypass Effects音源滤波开关是作用在当前音源的音频滤波器的开关。滤波器包括“高通滤波”、“低通滤波”、“回波滤波”、“扭曲滤波”、“回音滤波”、“和声滤波”等,这些滤波器可设置在音源或者监听器上。勾选此项时,设置在音源的滤波器将失效。
Bypass Listener Effects监听器滤波开关是作用在当前监听器的音频滤波器的开关。同理,勾选此项时,设置在监听器的滤波器将失效。
Bypass Reverb Zones回音混淆开关当勾选时,不执行回音混淆。即便玩家位于回音区域,此音源也不会产生回音。回音效果取决于监听器位置(一般代表玩家位置)与回音区域位置关系,与音源无直接关联,详细内容见“回音区域”章节。
Play On Awake启动播放开关如果勾选,当GameObject加载并启用时,会立刻播放音频,相当于此音源GameObject的组件中Awake方法作用时开始播放。若不勾选,则需手动调用Play()方法执行播放。
Loop循环播放开关勾选时,音频播放结束后将从头开始再次循环播放。
Priority播放优先级决定了当前音源在当前场景所有音源中的播放优先级(优先级:0 = 最重要,256 = 最不重要,默认值 = 128)。背景音乐最好设置为0,以避免被其他音源替换。一般手机或其他播放设备最多允许32个音源同时播放,此优先级参数决定了超出音源数目时,需暂时关闭一些不重要的音源,优先播放更重要的音源。
Volume音源音量此音量代表监听器处于距离音源1米时的音量大小,即最大音量处的声音大小。
Pitch音频音调代表播放音频时速度的变化量,默认值是1,代表正常播放速度。当值小于1时,慢速播放;当值大于1时,快速播放,速度越快,音调越高。
Stereo Pan声道占比此数值在[-1,1]之间变化,代表2D音源的左右声道占比,默认值为0,代表左右声道输出音量相同。此数值针对2D音源或者2D、3D混合音源有效,纯3D音源无效。
Spatial Blend空间混合此数值在[0,1]之间变化,指定当前音源是2D音源、3D音源,还是二者插值的复合音源,此参数决定了引擎作用在此音源上的3D效果的份量。主要影响“3D Sound Settings”属性组中的参数表现,例如,2D音源声音在距离上不衰减,也就没有多普勒效果。无论2D、3D,与音频滤波器不关联。例如,即便为纯2D音源,它仍响应回音区域,而滤波器的控制主要由相应的滤波参数和音源滤波混合参数决定,混合参数如前面提到的Bypass EffectsBypass Listner Effects两个开关以及后面的Reverb Zone Mix。也就是说,此参数与“3D Sound Settings”属性组中的3D音频设置参数共同作用构成最终的输出。当为纯2D音源时,3D音频设置将被无视;纯3D音源时,3D音频设置得到完整输出;非纯情况则插值混合输出。
Reverb Zone Mix回音混合设置输出到混响区域中的信号量,一般在[0,1]范围内变化,不过也允许额外最多放大10分贝(1 - 1.1]来增强声音的远近效果。也就是说,回响效果的回响距离等很多复杂参数主要由回响滤波器实现,而回响音量大小主要由此因子来简单控制。
3D Sound Settings3D音频设置以下参数按比例与空间混合参数共同作用。
Doppler Level多普勒等级在[0,5]之间变化,默认值为1,决定了音源的多普勒效应的份量。如果设置为0,则没有多普勒效应。多普勒效应指的是当监听器与音源之间发生相对运动时,声音传递速度发生变化时的效果。例如,假设有一架飞机掠过上空,飞机上的警报器每秒发出一次声音。若相对静止,听到的效果是每秒一次警报;而当飞机快速靠近时,由于距离不断缩短,声音传递时间越来越少,听到的警报会越来越紧促;当飞机快速离去时,警报声音节奏会越来越松缓。
Spread传播角度设置扬声器空间的立体声传播角度。此参数似乎对回音效果有一定影响,其他方面暂时未发现明显影响,若读者有更详细解释,欢迎告知。
Min Distance最小距离默认值为1米,代表音量曲线中的最大音量位置。超越最小距离时,声音将逐渐衰减。增大最小距离,相当于增大了3D世界中的声音,因为最小距离以下的位置均获得最大音量;减小最小距离,则相当于减小了3D世界中声音。因为由Volume参数可知,在曲线上1米处为最大音量,默认曲线小于1米处均获得最大音量,而当MinDistance小于1时,默认曲线中X = 1处的音量响应也会变小。注意,图中Listener竖线代表监听器与当前音源的相对距离,与Volume曲线的交点即是:1米处的最大音量经过3D世界距离传播到当前位置而衰减后的音量大小。即如果在曲线上,1米处Y坐标是0.8,而Listener处Y坐标是0.4,那么最终音量是衰减了50%,此参数与Volume参数共同作用输出最终音量大小,即Volume * 0.5
Max Distance最大距离当超出此距离时,声音将停止衰减。需注意这里是停止衰减,即后续更远处听到的声音将保持在最大距离点的声音大小,不代表声音为0。
Rolloff Mode衰减模式代表了声音在距离上的衰减速度,具体衰减数值由曲线决定(X - 距离,Y - 衰减后剩余百分比)。包含以下三种模式:
- Logarithmic Rolloff:预制的对数衰减曲线,可以修改。
- Linear Rolloff:预制的线性衰减曲线,可以修改。
- Custom Rolloff:自定义的衰减曲线,完全手动设置。

三、音源可以设置的衰减曲线模型

距离曲线函数

以下声音属性可通过距离曲线修改,此处的距离指音源和监听器之间的距离:

  • Volume:振幅(0.0 - 1.0)在距离上的变化曲线。
  • Spatial Blend:空间混合参数在距离上的变化曲线。空间混合参数代表了2D音源 - 3D音源的插值,2D音源为原始的声道匹配,3D音源是将当前所有声道混合转换成单声道,在距离和方向上进行衰减。
  • Spread:传播角度在距离上的变化曲线(角度范围0.0 - 360.0)。
  • Low - Pass(只有当音源添加低通滤波器LowPassFilter时出现):截断频率(22000.0–10.0)在距离上的变化曲线。
  • Reverb Zone:回音混合参数在距离上的变化曲线。需注意,振幅属性、距离和方向上的衰减将首先应用到信号,因此它们会同时影响直接传播的声音信号和回音信号。

距离曲线函数包括振幅(Volume)、空间混合(Spatial Blend)、传播角度(Spread)、低通滤波器(Low - Pass audio filter)和回音混合(Reverb Zone Mix)。图中当前监听器到当前音源距离由红色垂直线标出,可通过直接编辑此曲线来改变此距离函数。若要编辑曲线,可查看编辑曲线(Editing Curves)。

四、创建音源

如果音源没有被赋予音频片段(Audio Clip),则不会有任何动作。音频片段是指那些可以被播放的音频文件。音源就像一个播放器,可通过它控制音频片段的播放、停止和改变播放属性。

新建音源的步骤如下:

  1. 导入音频文件到你的Unity工程,这些音频文件就是音频片段(Audio Clips)。
  2. 通过菜单:GameObject -> Create Empty,创建一个空对象。
  3. 选中此GameObject,选择Component -> Audio -> Audio Source来添加音源脚本组件。
  4. inspector面板中,将步骤1中的音频片段赋给音源组件。

小技巧

如果你想快速为某个音频片段创建一个音源,可以拖动这个音频片段到某个GameObject的属性面板(inspector)上,或者直接拖动到场景中任意位置,这两种情况下都会自动创建音源脚本。

原文链接:http://blog.csdn.net/andrewfan/article/details/53634291

作者信息

孟子菇凉

孟子菇凉

共发布了 1189 篇文章