U1L14-4——麦克风输入相关

麦克风输入

Unity 可以通过脚本来访问计算机的麦克风,并可通过直接录音来创建音频剪辑。Microphone 类提供了一个简单的 API 来查找可用的麦克风,查询麦克风的功能,以及开始和结束录制会话。

使用该类可通过连接的麦克风来录制 AudioClip

可通过 devices 属性获取所连接麦克风的列表,然后使用 StartEnd 函数开始或结束(使用一个可用设备)录制会话。

UnityEngine.Microphone - Unity 脚本 API

本课代码关键字

1
2
3
4
5
6
Microphone.devices            //获取设备麦克风信息
Microphone.Start(, , , ) //开始录制
Microphone.End() //结束录制
audioclip.channels //音频文件的声道数(channals)
audioclip.samples //音频文件的剪辑长度(samples)
audioclip.GetData(, ) //通过数组(所有的采样点)存储为音频,第二个参数是偏移位置

获取设备麦克风信息

1
2
3
4
5
string[] strs = Microphone.devices;
foreach (string str in strs)
{
print(str);
}

开始录制

  • 参数一:设备名 传空使用默认设备
  • 参数二:超过录制长度后 是否从头录制
  • 参数三:录制时长
  • 参数四:采样率(每秒采集多少个采样点,一般都会用44100)
1
2
3
4
5
6
7
8
9
10
11
12
private AudioClip clip;
void Update()
{
//参数一:设备名 传空使用默认设备
//参数二:超过录制长度后 是否从头录制
//参数三:录制时长
//参数四:采样率(一般都会用44100)
if (Input.GetKeyDown(KeyCode.Space))
{
clip = Microphone.Start(null, false, 10, 44100);
}
}

结束录制

1
2
3
4
5
6
7
8
9
10
11
12
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();
}

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

音频存储规则规则

用于存储数组数据的长度是: 声道数(channals)* 剪辑长度(samples)

1
float[] f = new float[clip.channels * clip.samples];

通过数组存储音频

第一个参数是数据数组,第二个参数是偏移位置

1
2
clip.GetData(f, 0);    //第一个参数是数据数组,第二个参数是偏移位置
print(f.Length); //输出的是采样点总数