音效文件
音效文件(Audio Clips)是通过 AudioSource 组件来播放的。
当你将一个音频文件导入 Unity 项目后,Unity 会自动将其转换为 AudioClip 资源,并在 Inspector 面板中显示一系列属性,这些属性允许你配置音频文件的行为和优化设置
1. 音效文件格式
2. 音效文件面板参数
Force To Mono:多声道转单声道
Load in Background:在后台加载,不阻塞主线程(适用于大的音频)
Ambisonic:立体混响声
LoadType:加载类型
Decompress on Load: 将整个音频文件解压到内存中,内存占用高,适合短小的音频片段,如音效。
Compress in memory:加载慢,内存小。仅适用于较大音频。
Streaming: 按需从磁盘加载音频数据,适合长音频文件,如背景音乐。
Preload Audio Data: 预加载音频数据,勾选后进入场景就加载。不勾选,第一次使用才加载
Compression Format:压缩格式。
PCM (未压缩): 不对音频进行任何压缩,提供最佳音质但文件较大。
Vorbis: 使用 Vorbis 编码进行有损压缩,适合大多数情况,提供较好的音质/大小平衡。
ADPCM: 使用 ADPCM 编码进行轻度有损压缩,适合需要快速加载的短音频片段,如碰撞声。
音频源和音频监听器脚本
1. AudioSource音频源
AudioClip:声音剪辑文件(音频文件)
Mute:静音开关
Play On Awake:对象创建时就播放音乐
Loop:循环
Priority:优先级
Volume:音频大小
Pitch:音高
代码控制音频源
1. 代码控制播放停止
using UnityEngine;
public class Testing_01 : MonoBehaviour
{
AudioSource audioSource;
private void Start()
{
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
// 播放音频
if (Input.GetKeyDown(KeyCode.S))
{
audioSource.Play();
}
// 暂停音频
if(Input.GetKeyDown(KeyCode.P))
{
audioSource.Pause();
}
// 停止音频
if (Input.GetKeyDown(KeyCode.Space)){
audioSource.Stop();
}
}
}
2. 检查音频是否播放完毕
using UnityEngine;
public class Testing_01 : MonoBehaviour
{
AudioSource audioSource;
private void Start()
{
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
if(audioSource.isPlaying)
{
print("播放中");
}else
{
print("播放完毕");
}
}
}
3. 动态控制音频播放
using Unity.VisualScripting;
using UnityEngine;
public class Testing_01 : MonoBehaviour
{
AudioSource audioSource;
public AudioClip clip;
private void Start()
{
audioSource = GetComponent<AudioSource>();
// 一个GameObject可以有多个Audio Source组件
AudioSource aus = transform.AddComponent<AudioSource>();
aus.clip = clip;
aus.Play();
}
}
麦克风输入相关
1. 获取设备麦克风设备
string[] devices = Microphone.devices;
for(int i = 0; i < devices.Length; i++)
{
print(devices[i]);
}
2. 开始录制和结束录制
using UnityEngine;
public class Testing_01 : MonoBehaviour
{
private AudioClip clip;
private AudioSource audioSource;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// 参数一:设备名,设置null用默认设备
// 参数二:超过录制长度后,是否从头录制
// 参数三:录制时长
// 参数四:采样率
clip = Microphone.Start(null, false, 10, 44100);
}
if(Input.GetKeyUp(KeyCode.Space))
{
Microphone.End(null);
audioSource = GetComponent<AudioSource>();
if(audioSource == null )
{
audioSource = this.gameObject.AddComponent<AudioSource>();
}
audioSource.clip = clip;
audioSource.Play();
}
}
}
3. 获取音频数据用于存储和传输
clip.channels:表示音频剪辑中的声道数量。例如,单声道音频有1个通道,立体声有2个通道。
clip.samples:表示每个声道中的样本数。样本是音频数据的基本单位,代表了在某一时刻的声音振幅。
using UnityEngine;
public class Testing_01 : MonoBehaviour
{
private AudioClip clip;
private AudioSource audioSource;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
clip = Microphone.Start(null, false, 10, 44100);
}
if(Input.GetKeyUp(KeyCode.Space))
{
Microphone.End(null);
audioSource = GetComponent<AudioSource>();
if(audioSource == null )
{
audioSource = this.gameObject.AddComponent<AudioSource>();
}
audioSource.clip = clip;
audioSource.Play();
// 处理录制的音频
float[] f = new float[clip.channels * clip.samples];
clip.GetData(f, 0); // 将音频数据放入f数值中
// TODO:将f数组转化为二进制流,然后输出文件
print(f.Length);
}
}
}
评论区