目录
Spatial Blend2D~3D :音频受3D空间的影响程度
一.音频文件导入
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);

7707

被折叠的 条评论
为什么被折叠?



