Unity核心系统——音效系统

目录

一.音频文件导入

1.常用格式

2.音频文件属性

3.音频文件属性设置

二.音频源和音频监听脚本

Spatial Blend2D~3D :音频受3D空间的影响程度

三.代码控制音频源

1.代码控制播放停止

2.检测音效是否播放完毕

3.如何动态的控制音效播放

四.麦克风输入相关

1.获取麦克风信息

2.开始/结束录制

3.获取音频数据用于存储或者传输


一.音频文件导入

1.常用格式

wav、mp3、ogg、aiff

2.音频文件属性

选中音效文件后,在Inspector面板的右下角会有下图所示界面

 点击双横线处

 从左到右的按钮依次是 播放与暂停、是否自动播放、是否循环播放

3.音频文件属性设置

Force To  Mono 多声道转单声道   Normalize 强制转为单声道时,混合过程中被标准化

Load In Background 在后台加载,不阻塞主线程

Ambisonic 立体混响声

LoadType 加载类型

        1.Decompress On Load 不压缩形式存在内存,加载快,但内存占用高——适用于小音效

        2.Compress in memory 压缩形式内存,加载慢,内存小——仅适用于较大音效文件

        3.Streaming 以流形式存在,使用解码。内存占用最小,cpu消耗高——性能换内存

Preload Audio Data 预加载音频,勾选后进入场景就加载;不勾选,第一次使用时才加载

Compression Format

        1.PCM 音频最高质量存储

        2.Vorbis 相对PCM压缩的更小,根据质量决定

        3.ADPCM 压缩较多,包含噪音,会被多次播放的声音,如碰撞声

Quality 音频质量,确定要应用于压缩剪辑的压缩量,不适用于PCM/ADPCM/HEVAG格式

Sample Rate Setting 

:PCM 和 ADPCM 压缩格式允许自动优化或手动降低采样率

        1.Preserve Sample Rate 此设置可保持采样率不变(默认值)

        2.Optimize Sample Rate 此设置根据分析的最高频率内容自动优化采样率

        3.Override Sample Rate 此设置可手动覆盖采样率,因此可有效地将其用于丢弃频率内容

        

二.音频源和音频监听脚本

1.Audio Source

AudioClip 音频文件 (待使用的音频文件拖入这里)

Mute 静音开关

Pitch 音高

Spatial Blend2D~3D :音频受3D空间的影响程度

只有当此处调整为音频会受3D空间影响时,才有调整下图的必要

而音频受3D空间的影响有以下3种不同的计算曲线

当设置为第一和第二两种模式时,还可以手动输入能听到声音的最小和最大范围 

2.Audio Listener

相当于“耳朵”的功能,用于接收声音,场景中一次有且只能有一个该脚本

三.代码控制音频源

1.代码控制播放停止

public class Lesson20 : MonoBehaviour
{
    AudioSource audioSource;

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            //播放音效
            audioSource.Play();
        }
        if(Input.GetKeyUp(KeyCode.S))
        {
            //停止音效
            audioSource.Stop();
        }
        if(Input.GetKeyDown(KeyCode.Q))
        {
            //暂停
            audioSource.Pause();
        }
        if(Input.GetKeyUp(KeyCode.T))
        {
            //结束暂停
            audioSource.UnPause();
        }
    }
}
//延时播放,里面填的数字是延后的时间
audioSource.PlayDelayed(5);

2.检测音效是否播放完毕

void Update()
{
    if(audioSource.isPlaying)
    {
        print("正在播放");
    }
    else
    {
        print("播放结束");
    }
}

3.如何动态的控制音效播放

在Start中 ,先给挂载了该脚本的 物体添加一个 AudioSource的脚本 ,然后通过赋值交给AudioSource类型的对象aus 管理

public class Lesson20 : MonoBehaviour
{
    public AudioClip clip;

    void Start()
    {
        AudioSource aus = this.gameObject.AddComponent<AudioSource>();
        aus.clip = clip;
        aus.Play();
    }

    void Update()
    {
        
    }
}

将该脚本挂载到物体上后

再将待使用的音频文件拖给 脚本中声明的 clip音频对象 

最终运行的效果:在挂载了该脚本的物体上再生成了一个 AudioSource脚本,并由该脚本播放音频

//潜在知识点:一个GameObject物体可以挂载多个音频Clip文件,但需要自己管理好

四.麦克风输入相关

1.获取麦克风信息

string[] strs = Microphone.devices;
foreach (string str in strs) 
{ 
    print(str);
}

2.开始/结束录制

void Update()
{
    //参数一:设备名 传空使用默认设备
    //参数二:超过录制长度后 是否重头录制
    //参数三:录制时长(秒)
    //参数四:采样率(一般44100)
    if (Input.GetKeyDown(KeyCode.Space))
    {
        //开始录制
        clip = Microphone.Start(null, false, 10, 44100);
    }

    if (Input.GetKeyUp(KeyCode.Space))
    {
        //结束录制 (参数:设备名,传空使用默认设备)
        Microphone.End(null);
        AudioSource s = this.GetComponent<AudioSource>();
        if(s == null )
        {
            s = this.gameObject.AddComponent<AudioSource>();
        }
        s.clip = clip;
        s.Play();
    }
}

3.获取音频数据用于存储或者传输

//规则 用于存储数组数据的长度 是用 声道数*剪辑长度
float[] f = new float[clip.channels * clip.samples];
clip.GetData(f, 0);
print(f.Length);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值