音效组件AudioSources
Contents
音效系统
Unity支持的音频格式
- wav
- mp3
- ogg
- aiff
音频文件属性设置
- Force To Mono 多声道转单声道
- Normalize 转换为单声道时 混合过程中被标准化
- Load In Background在后台加载 不阻塞主线程
- Ambisonic 立体混响声 适合360度视频和xr应用程序 如果音频文件包含立体混响声编码 请启用此选项
- LoadType加载类型 可根据不同的平台单独设置
- Decompress On Load 不压缩的形式存在内存 加载快 但是占用内存较高 适用小音效
- Compress in memory 压缩形式存在内存 加载慢 内存小 适用于较大的音效文件
- Streaming 以流形式存在 使用时解码 占用内存小 cpu消耗高 性能换内存
- Preload Audio Data 预加载音频 勾选后进入场景就加载 不勾选 第一次使用才加载
- Compression Format 压缩方式
- PCM音频以最高质量存储
- Vorbis相对PCM压缩的更小 根据质量决定
- ADPCM 包含噪音,会被多次播放的声音,如碰撞声
- Quality音频质量 确定要应用于压缩剪辑的压缩量 不适用于PCM/ADPCM/HEVAG格式
- Sample Rate Setting 压缩个是允许自动优化或说动降低采样率
- Preserve Sample Rate 此设置可保持采样率不变(默认值)
- Optimize Sample Rate 此设置根据分析的最高频率内容自动优化采样率
- Override Sample Rate 手动设置采样率
AudioSource
- 需要挂载AudioListener才能听到声音
- 一个对象可以挂载多个AudioSource
- 使用时需要注意 如果挂载多个AudioSource 那一定要自己管理他们 控制他们的播放停止 不然我们没有办法准确的获取谁是谁
AudioSource组件面板属性
- AudioClip 声音剪辑文件(音频文件)
- Putput 默认将直接输出到场景中的音频监听器 可以更改为输出到混音器
- Mute 静音开关
- Bypass Effect开关滤波器效果
- Bypass Listener Effects 快速开关所有监听器
- Bypass Reverb Zones 快速开关所有混响区
- Play On Awake 对象创建时就播放音乐
- Loop循环
- Priority优先级
- Volume音量大小
- Pitch音高
- Stereo Pan 2D声音立体声位置 相当于左右声道
- Spatial Blend 音效受3D空间的影响程度
- Reverb Zone Mix 到混响区的信号输出量
- 3D Sound Setttings 和Spatial Blend参数成正比应用
- Doppler Level 多普勒效果等级
- Spread 扩散角度设置为3D立体声还是多声道
- Volume Rolloff 声音衰减速度
- Logarithmic Rolloff 靠近音源时声音很大 离开时 降低的很快
- Linear Rolloff 与音频源距离越远 听到的声音越小
- Custom Rolloff 音频源的音频效果是根据曲线图的设置变化的
- Min/Max Distance
- 最小距离内 声音保持最大的响度
- 最大距离外 声音开始减弱
代码控制音频源
获取AudioSource
//获取AudioSource
audioSource = GetComponent<AudioSource>();控制播放暂停
audioSource.Play();//播放
audioSource.PlayDelayed(5);//5秒后播放 单位秒
audioSource.Stop();//停止
audioSource.Pause();//暂停
//停止暂停 和暂停后play是一个效果
audioSource.UnPause();如何检测音效播放完毕
if(audioSource.isPlaying){
Print("播放中");
}
else{
Print("播放结束");
}使用一个AudioSource控制播放不同的音效
public AudioClip clip;
audioSource.clip = clip;
audioSource.Play();麦克风输入相关
获取设备麦克风信息
String[] strs = Microphone.devices;开始录制
//参数1:设备名 如果使用默认设备传null
//参数2:超过录制长度后是否重新入职 一般faslse
//参数3:录制长度 单位秒
//参数4:采样率
//返回一个AudioClip
AudioClip clip = Microphone.Start(null,false,10,44100);结束录制
//参数:设备名
Microphone.End(null);AudioClip
获取音频数据
//规则 用于存储数组数据的长度 是用 声道数*剪辑长度
float[] f = new float[clip.channels * clip.samples];
clip.GetData(f,0);