Unity學習筆記08音頻系統(tǒng)
聲音的三個特征:響度,音調,音色
多普勒效應
綁定在動態(tài)物體上可以反映出物體的運動速度(如汽車從遠至近,再遠去,汽車的聲音頻率會發(fā)生明顯的變化)
當聲源的運動方向與聲音傳播方向一致時,波長會縮短,所以頻率會增加,我們聽到的現(xiàn)象就是聲音變尖。
反之、在聲源離我們遠去時,波長增長,頻率降低。
實踐
播放聲音的游戲對象有一個Audio Source組件,用來控制聲音的播放,在攝像機上有一個默認組件Audio Listener
(接收器)用來接收聲音,點擊Scene視圖下的喇叭標志,就可以直接聽見聲音的效果,不需要Play游戲。
Audio Source(聲音源)組件的屬性
AudioClip:將要播放的聲音資源文件。
Output:指的是聲音播放出來后是要經(jīng)過混音器處理后再到達接收處,還是直接到達。
Mute:是否靜音
Bypass Effects:音源濾波的開關(是否打開音頻特效)
Bypass Listener Effects:監(jiān)聽效果的濾波開關
Bypass Reverb Zones:回音的開關(勾選后就不執(zhí)行回音效果了)
Play On Awake:場景啟動,自動播放
Loop:是否循環(huán)播放
Priority:播放的優(yōu)先級(最高級是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:對數(shù)衰減,接近聲源時 ,聲音響亮,當遠離聲源時,聲音下降的顯 ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?著快一些
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2,Linear Rolloff:線性衰減
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3,Custom Rolloff:自定義的衰減
混音器(AudioMixer)
作用
1.聲音接收器獲得音源的聲音有兩種方式(一是聲音源直接傳給接收器,二是聲音源通過混音器將聲音傳給接收
器)
2.混音器可以對聲音進行進一步加工。
聲音分類
不同的聲源要經(jīng)過不同的混音器處理,所有必須做好聲源的分類整理工作,避免混亂,分類可以使得聲音控制更加
合理。
混音器的一些屬性
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,為某一組環(huán)境音添加衰減音效。
2,為水下環(huán)境添加低通濾波器。
3,出現(xiàn)UI時,衰減所有的游戲音量除了菜單和交互。
4,當NPC交談時,減弱槍炮的音量。
聲音信號分類建議
1,所有聲音源放入master分組中
2,音樂、菜單聲音和所有的游戲聲音是子分組
3,游戲聲音再子分為NPC對話、環(huán)境音和其他聲音,
4,可以再進行子分
混音器快照Snapshot
1,保存混音器的不同設置(音量Volume、音高Pitch、發(fā)送級別Send Level、濕混合級別Wet Mix Level、音效參
數(shù)Effect Parameters)
2,在游戲進行中進行不同快照的切換(得到不同的聲音氛圍)
實踐
如果在場景中有多個聲音源的話,盡可能把它們都輸出到同一個Group里面,效率較高。
點擊混音組下面的Add可以添加處理效果
Send--Receive
Add--Send,添加該處理后,處理后的聲音會輸出,需要一個Receive(在另一個混音組添加),并且需要在添加
了Send的混音組中指明哪個Receive來接收。調整Send level可以修改傳送的級別。在send出來的這部分,即接收
的混音組,可以為該混音組添加(Add)不同處理效果。
Reverb表示混響效果,混響可以用來模擬一些空曠場地里面的聲音傳輸特點。
為Receive ? ?Add一個SFX Reverb,調整其參數(shù),來模擬不同的空曠場地的聲音效果(回聲之類的),聲音特效的
順序很重要,是先接收Send的聲音。然后再進行特效處理
Add----Echo表示回聲效果。(send--receive的機制有益于這種處理,可以讓某一個混音組專門來處理回聲效果)
混音器中的參數(shù)可以通過腳本來控制,選擇某一個混音組,右鍵Volume-->Espose,,,將這個參數(shù)開放出來,可以通
過腳本來控制,當將其開放出來后,在AudioMixer模塊的右上角的Expose Parameters中就可以看到。并且可以
為開放出來的參數(shù)重命名。
新建腳本,下面代碼使用上下鍵來控制音量,要建一個空物體,腳本放到上面,在將需要控制的混音器添加給腳本
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);//使用字符串的方式來得到開放出來的參數(shù)
? ? ? ?if(Input.GetKeyDown(KeyCode.UpArrow))//用戶是否按下了向上的按鍵
? ? ? ?{
? ? ? ? ? ?audioMixer.SetFloat("MyExposedParam", v+1);//修改得到的參數(shù)的值,用第二個參數(shù)替代
? ? ? ?}
? ? ? ?if (Input.GetKeyDown(KeyCode.DownArrow))//用戶是否按下了向下的按鍵
? ? ? ?{
? ? ? ? ? ?audioMixer.SetFloat("MyExposedParam", v - 1);//修改得到的參數(shù)的值,用第二個參數(shù)替代
? ? ? ?}
? ?}
}