Unity声音系统笔记

1.概述

  • Audio Clip 声音剪辑
声音导入Unity,Unity自动生成的一种文件格式
  • Audio Source 声源信息
控制声音片段的播放、暂停、停止、继续等一系列操作
  • Audio Listener 接收者
可以用它来接听声音
  • Reverb Zones 混响区域
模拟声音在山洞、水下的混响效果
  • Audio Filters 音频滤波器
高通滤波、低通滤波、回声、和声等效果
  • Audio Effects 音频特效
音频特效,需结合Audio Mixer使用
  • Audio Mixer 音频混合器

2.Unity中的声音

声音格式

  • .aiff/.aif, .wav, .mp3, .ogg 标准声音格式
  • .xm, .mod, .it, .s3m 使用Tracker模块播放声音
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.

导入设置

  • 声音文件在Unity中的默认存储方式:PCM, ADPCM, Compressed。默认方式是压缩的
  • 在PC和手机短以动平台的压缩方式为Vorbis或者MP3, PS Vita和Xbox平台的压缩方式为HEVAG或者XMA

系统设置

Edit -》Project Setting -》Audio

image-20210614024109694

Global Volume: 全局音量设置,设为0就听不到声音了

Volume Rolloff Scale: 音量衰减因子,值越大,音量衰减越快。主要针对3D音乐效果,默认1,模拟真实情况,一般情况下不需要更改

Doppler Factor:,物体辐射的波长因为波源和观测者的相对运动而产生变化。在运动的波源前面,波会被压缩,波长就会变的较短,频率也会变得较高。在运动的波源后面会产生相反的效应。例子:当一辆车迎面驶来的时候,听到的声音会比原来的高,当车离去的时候,声音会比原来的低

Default Speaker Mode: 扬声器模式

System Sample Rate: 输出采样率,0采用系统的采样率,这个值只是个参考值,只有某些特定的平台才能对其进行修改

DSP Buffer Size: 混合器的缓存区大小

Default:默认的缓存大小

Best Latency:用性能换取延迟,延迟较低,性能不一定高

Good Latency:在延迟和性能之间取得平衡

Best performance:提高性能放弃延迟

Max Virtual Voices: 系统管理的虚拟声音的数量,该值应总是比我们游戏播放的声音数量大

Max Real Voices: 可以同时播放的真实声音的数量

Spatializer Plugin: 声音的定位插件

Ambisonic Decoder Plugin: 解码器插件

Disable Unity Audio: unity声音系统的禁止选项,勾选声音不生效

Virtualize Effects: 虚拟声音特效开关、默认不关

3.AudioClip声音剪辑

声音属性

image-20210614025608067

加载的时候解压,i性能开销大,不适用于较大的文件

把声音压缩再内存,再播放时进行解压,开销较小,使用于较大文件

动态解码、使用流数据,从磁盘增量读取

image-20210614030335651

image-20210614030552609

image-20210614030944789

注:MP3压缩格式只有在安卓平台下有

image-20210614031237606

4.控制声音播放

Audio Listener

  • 声音接收者,一般挂在Main Camera上,无属性
  • 一个场景中只有一个

Audio Source

  • 一个组件只能同时对应一个AudioClip,当重新赋值时会被替换
动态修改音频
audioSource.clip = audioClip;

代码控制音频

添加音频对象

image-20210614154618243

添加音频控制脚本

image-20210614154657098

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AudioSourceControl : MonoBehaviour
{
    public AudioSource audioSource;

    private void OnGUI()
    {
        if(GUILayout.Button("Play", GUILayout.Width(100)))
        {
            //播放
            if(!audioSource.isPlaying)
            {
                audioSource.Play();

            }   
        }

        if(GUILayout.Button("Stop", GUILayout.Width(100)))
        {
            //停止
            audioSource.Stop();
        }

        if (GUILayout.Button("Pause", GUILayout.Width(100)))
        {
            //暂停
            audioSource.Pause();
        }

        if (GUILayout.Button("Continue", GUILayout.Width(100)))
        {
            //继续
            audioSource.UnPause();
        }
    }
}

5.AudioSource属性

image-20210614160823535

6.Reverb Zone

image-20210614163209696

7.Audio Filter

image-20210614163606556

image-20210614163633738

8.Audio Mixer初识

音频信号线路
image-20210614211432056
一个AudioSource可以直接被AudioListener接听

也可以经过一个或多个AudioMixer处理后再被AudioListener接听

AudioMixer View

  1. The Asset - 包含所有的AudioGroups 和AudioSnapshots 作为子层级
  2. The Hierarchy view - 它包含AudioMixer中AudioGroups的整个混合层次结构
  3. The Mixer Views -这里面缓存 mixer的可见设置列表. 每个视图仅在main mixer window主混合窗口中显示整个层次结构的一个子集合。
  4. Snapshots -这是一个AudioMixer资产中的所有AudioSnapshots的列表. Snapshots捕获所有在AudioMixer中的参数设置状态,并且能够在运行时切换
  5. The Output AudioMixer -可以将AudioMixers规划到其他AudioMixers的AudioGroups中.这个属性可以单独定义一个 output AudioGroup 然后把这个AudioMixer的音频效果导入进去,也就是AudioMixer可以嵌套
  6. AudioGroup Strip View - 展示的是一个 AudioGroup的视图,包括当前的 VU 等级, 音量attenuation (volume) 设置, Mute, Solo and Effect Bypass 设置和 这个组的DSP effects 效果
  7. Edit In Play Mode - 这是按钮允许你在播放模式下编辑AudioMixer,或者防止编辑并允许游戏运行时控制AudioMixer的状态。
  8. Exposed Parameters - 这是一个 Exposed Parameters列表 ( AudioMixer 的任意参数可以通过一个string 名字暴露出来,然后让脚本访问) and 相应的字符串名称.

9.Audio Groups使用

image-20210614213054590

AudioGroup作为AudioSource的输出

image-20210614213303911

image-20210614213754360

10.发送单元 和 接收单元

image-20210614214720746

image-20210614214914021

image-20210614215528124

11.SnapShot 快照切换

image-20210614220149081

image-20210614220200898

image-20210614220252161

快照可以再游戏运行的时候进行切换

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;	//需引用

public class SnapShotControl : MonoBehaviour
{
    public AudioMixerSnapshot[] audioMixerSnapshots;

    private void OnGUI()
    {
        if(GUILayout.Button("SnapShot1", GUILayout.Width(100)))
        {
            audioMixerSnapshots[0].TransitionTo(1f);	//param:切换时做插值的时间
        }

        if (GUILayout.Button("SnapShot2", GUILayout.Width(100)))
        {
            audioMixerSnapshots[1].TransitionTo(1f);
        }

    }
}

快照之间切换时,声音的变化时插值变换

每个效果的的插值变换都是可设置的

直接选择效果右键即可弹出选择列表

image-20210614232015803

12.参数列表的使用

如何暴露参数到参数列表

image-20210615001453528

image-20210615001556049

API使用格式

 AudioMixer.SetFloat("参数列表中的参数名", 修改数值);

参考代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class ExposedParamsControl : MonoBehaviour
{
    public AudioMixer audioMixer;	//目标混音器

    private void OnGUI()
    {
        if (GUILayout.Button("SetSub1Volume -80", GUILayout.Width(150)))
        {
            audioMixer.SetFloat("Sub1Volume", -80);
        }

        if (GUILayout.Button("SetSub1Volume 20", GUILayout.Width(150)))
        {
            audioMixer.SetFloat("Sub1Volume", 20);
        }

        if (GUILayout.Button("SetSub1Volume 0", GUILayout.Width(150)))
        {
            audioMixer.SetFloat("Sub1Volume", 0);
        }
    }

}

13.其它

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适用峰值

当初我学习Unity系统的时候,我做了一些笔记,希望能帮到你入门。下面是一些关键点: 1. Unity是一个跨平台的游戏开发引擎,可用于开发2D和3D游戏。它提供了一个可视化的编辑器,让你可以轻松地创建场景、对象、材质等。 2. 编辑器界面:Unity的编辑器界面分为场景视图、层次视图、资源视图和检视视图等。场景视图用于查看和编辑场景,层次视图显示场景中的对象层次结构,资源视图用于管理项目中的资源,检视视图则显示了当前选中对象的属性和组件。 3. 游戏对象:Unity中的一切都是游戏对象,包括角色、道具、相机等。每个游戏对象都可以附加多个组件,比如渲染器、碰撞器、脚本等,用来实现不同的功能和行为。 4. 脚本编程:Unity使用C#作为主要的编程语言。你可以编写脚本来控制游戏对象的行为。脚本可以挂载到游戏对象上,通过组件来访问和修改游戏对象的属性和方法。 5. 场景管理:通过场景管理器可以创建、编辑和切换不同的场景。你可以在场景中添加、移动、旋转和缩放游戏对象,设置摄像机视角,调整光照效果等。 6. 资源管理:Unity提供了资源视图来管理项目中的资源,包括纹理、音频、模型等。你可以导入和导出资源,并在项目中进行引用和使用。 7. 物理引擎:Unity内置了物理引擎,可以模拟物体的运动和碰撞。你可以给游戏对象添加刚体组件,设置质量、重力、碰撞检测等属性,实现真实的物理效果。 8. 动画系统Unity提供了强大的动画系统,可以创建和编辑角色的动画。你可以通过动画控制器来管理不同的动画状态,并通过脚本控制角色的动画播放和过渡。 这些仅是入门的基本知识点,希望对你有所帮助。如果你还有其他问题,可以继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值