Unity使用MicroPhone类调用麦克风录音
MicroPhone 类
使用这个类可以使用连接的麦克风录制到AudioClip 。 您可以从devices 属性中获取已连接麦克风的列表,然后使用Start 和End 函数使用一个可用设备启动或结束录制会话。
注意
Microphone 类录取保存到AudioClip 中的格式为PCM格式默认16000hz、16位、单通道,这些属性在转码时很关键。不管你是自己从Unity中拖音频文件到AudioClip 中还是用Unity中Microphone 类录制音频到AudioClip ,一定要知道AudioClip 中的音频编码格式。- 使用时需要请求权限,特别是iOS,不然没有提示,就是不能使用,而且需要在Player Setting–>Configuration里填写权限申请的说明。
- 如果iOS上Unity勾选了Perpara iOS for Recording会导致录音功能失效。
代码实例
using UnityEngine;
public class RecordVoice
{
public RecordVoice()
{
m_samplesLength = 128;
DeviceNameMIC = Microphone.devices[0];
LengthSec = 60;
Frequency = 16000;
}
protected AudioClip m_resultClip = null;
protected bool m_isTiming = false;
protected float m_startTime;
protected readonly int m_samplesLength;
public string DeviceNameMIC { get; set; }
public int LengthSec { get; set; }
public int Frequency { get; set; }
#region Public
public virtual void Start()
{
m_resultClip = Microphone.Start(DeviceNameMIC, false, LengthSec, Frequency);
m_isTiming = true;
m_startTime = Time.time;
}
public virtual void End()
{
Microphone.End(DeviceNameMIC);
m_isTiming = false;
}
public virtual float GetVolume()
{
float levelMax = 0;
if (Microphone.IsRecording(DeviceNameMIC))
{
float[] samples = new float[m_samplesLength];
int startPosition = Microphone.GetPosition(DeviceNameMIC) - (m_samplesLength + 1);
if (startPosition >= 0)
{
m_resultClip.GetData(samples, startPosition);
for (int i = 0; i < m_samplesLength; i++)
{
float wavePeak = samples[i];
if (levelMax < wavePeak)
{
levelMax = wavePeak;
}
}
levelMax = levelMax * 99;
Debug.Log("麦克风音量:" + levelMax);
}
}
return levelMax;
}
public virtual void KeepTime()
{
if (m_isTiming)
{
if (Time.time - m_startTime >= LengthSec)
{
End();
Debug.Log("时间到!");
}
}
}
#endregion
}
另外,经过测试,设备名(DeviceNameMIC )也可直接赋值为"Built-in Microphone" ,或null 。
Unity官方API(Microphone.Start)中:如果您为设备名传递一个null或空字符串,那么将使用默认麦克风。
参考链接
- Unity官方API
- Unity调取移动端的麦克风进行录音并播放
- unity实现录音并保存本地
- Unity录音AudioClip转MP3格式
- Unity中使用Microphone录音保存以及回放
- unity录音并保存为mp3或wav文件(pc端)
- unity自带的录音功能Microphone 在iOS 和 android设置上使用 及 注意事项
|