Unity学习笔记08音频系统
声音的三个特征:响度,音调,音色
多普勒效应
绑定在动态物体上可以反映出物体的运动速度(如汽车从远至近,再远去,汽车的声音频率会发生明显的变化)
当声源的运动方向与声音传播方向一致时,波长会缩短,所以频率会增加,我们听到的现象就是声音变尖。
反之、在声源离我们远去时,波长增长,频率降低。
实践
播放声音的游戏对象有一个Audio Source组件,用来控制声音的播放,在摄像机上有一个默认组件Audio Listener
(接收器)用来接收声音,点击Scene视图下的喇叭标志,就可以直接听见声音的效果,不需要Play游戏。
Audio Source(声音源)组件的属性
AudioClip:将要播放的声音资源文件。
Output:指的是声音播放出来后是要经过混音器处理后再到达接收处,还是直接到达。
Mute:是否静音
Bypass Effects:音源滤波的开关(是否打开音频特效)
Bypass Listener Effects:监听效果的滤波开关
Bypass Reverb Zones:回音的开关(勾选后就不执行回音效果了)
Play On Awake:场景启动,自动播放
Loop:是否循环播放
Priority:播放的优先级(最高级是0)
Volume:音量大小
Pitch:播放的速度
Stereo Pan:声道占比(只在2D音效中起作用)
Spatial Blend:空间混合,在这里设置是3D还是2D音效
Reverb Zone Mix:回音的混合
3D Sound Settings:当音源为3D时进行的一些设置,下面的为该设置中的内容
Doppler Level:多普勒效应的级别
Spread:设置3D立体声或者多声道音响的话,在扬声器空间中的传播
Min Distance:指的是在最小距离之内,声音会保持最响亮,在这个距离之外,声音开始减弱,增加这个值,可
以是使声音在3D世界中更响亮(减小反之)
Max Distance:指的是声音停止衰减的距离。超过这个值,保持音量,不会做任何的衰减。
Volume Rolloff :1, Logarithmic Rolloff:对数衰减,接近声源时 ,声音响亮,当远离声源时,声音下降的显
著快一些
2,Linear Rolloff:线性衰减
3,Custom Rolloff:自定义的衰减
混音器(AudioMixer)
作用
1.声音接收器获得音源的声音有两种方式(一是声音源直接传给接收器,二是声音源通过混音器将声音传给接收
器)
2.混音器可以对声音进行进一步加工。
声音分类
不同的声源要经过不同的混音器处理,所有必须做好声源的分类整理工作,避免混乱,分类可以使得声音控制更加
合理。
混音器的一些属性
Mixers:当前Project里面的所有混音器资源
Groups:组织和管理当前混音器里的不同的混音组,默认情况下有一个Master主混音组,在其下面可以添加子混
音组。
在Play模式下,点击edit in Play Mode后,可以对混音组进行编辑,并且该编辑会被保存。
每一个混音组都有三个小的按钮,M(Mute:当前混音组静音) ,S(Solo:当前混音组独放),B(Bypass:如
果该混音组添加了特殊的处理算法的话,点上B就是不进行这些处理,听一下原声音)
Snapshots(快照):对混音组进行了各种各样的编辑,但不同的编辑可能应用于不同的场合,新建快照可以单独
进行编辑,只保存于这个快照中。第一个snapshots是默认快照。
Views:为了方便编辑,可以单独只显示某个或者某几个混音组。
音乐的播放可以通过简单脚本来控制。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MixerController : MonoBehaviour
{
public AudioSource shootSnd;
public AudioSource explodeSnd;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0))
{
shootSnd.Play();
}
if (Input.GetKeyDown(KeyCode.Space))
{
explodeSnd.Play();
}
}
}
声音特效
为声音添加的常见特效
1,为某一组环境音添加衰减音效。
2,为水下环境添加低通滤波器。
3,出现UI时,衰减所有的游戏音量除了菜单和交互。
4,当NPC交谈时,减弱枪炮的音量。
声音信号分类建议
1,所有声音源放入master分组中
2,音乐、菜单声音和所有的游戏声音是子分组
3,游戏声音再子分为NPC对话、环境音和其他声音,
4,可以再进行子分
混音器快照Snapshot
1,保存混音器的不同设置(音量Volume、音高Pitch、发送级别Send Level、湿混合级别Wet Mix Level、音效参
数Effect Parameters)
2,在游戏进行中进行不同快照的切换(得到不同的声音氛围)
实践
如果在场景中有多个声音源的话,尽可能把它们都输出到同一个Group里面,效率较高。
点击混音组下面的Add可以添加处理效果
Send--Receive
Add--Send,添加该处理后,处理后的声音会输出,需要一个Receive(在另一个混音组添加),并且需要在添加
了Send的混音组中指明哪个Receive来接收。调整Send level可以修改传送的级别。在send出来的这部分,即接收
的混音组,可以为该混音组添加(Add)不同处理效果。
Reverb表示混响效果,混响可以用来模拟一些空旷场地里面的声音传输特点。
为Receive Add一个SFX Reverb,调整其参数,来模拟不同的空旷场地的声音效果(回声之类的),声音特效的
顺序很重要,是先接收Send的声音。然后再进行特效处理
Add----Echo表示回声效果。(send--receive的机制有益于这种处理,可以让某一个混音组专门来处理回声效果)
混音器中的参数可以通过脚本来控制,选择某一个混音组,右键Volume-->Espose,,,将这个参数开放出来,可以通
过脚本来控制,当将其开放出来后,在AudioMixer模块的右上角的Expose Parameters中就可以看到。并且可以
为开放出来的参数重命名。
新建脚本,下面代码使用上下键来控制音量,要建一个空物体,脚本放到上面,在将需要控制的混音器添加给脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class SFXMixerController : MonoBehaviour
{
public AudioMixer audioMixer;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float v;
audioMixer.GetFloat("MyExposedParam", out v);//使用字符串的方式来得到开放出来的参数
if(Input.GetKeyDown(KeyCode.UpArrow))//用户是否按下了向上的按键
{
audioMixer.SetFloat("MyExposedParam", v+1);//修改得到的参数的值,用第二个参数替代
}
if (Input.GetKeyDown(KeyCode.DownArrow))//用户是否按下了向下的按键
{
audioMixer.SetFloat("MyExposedParam", v - 1);//修改得到的参数的值,用第二个参数替代
}
}
}