本文的关键代码为Unity录音之AudioClip和byte[]相互转换
我们只讲思路
首先我们先贴代码
public AudioClip ConvertBytesToClip(byte[] rawData)
{
float[] samples = new float[rawData.Length / 2];
float rescaleFactor = 32767;
short st = 0;
float ft = 0;
for(int i=0;i<rawData.Length;i+=2)
{
st = BitConverter.ToInt16(rawData,i);
ft = st / rescaleFactor;
samples[i / 2] = ft;
}
AudioClip audioClip = AudioClip.Create("mySound", samples.Length, 1, 16000, false, false);
audioClip.SetData(samples, 0);
return audioClip;
}
这里的思路是,利用AudioSource的SetData这个方法,而这个方法需要的数组,乃float数组。所以我们第一步就是要做:
byte数组转float数组
float[] samples = new float[rawData.Length / 2];
float rescaleFactor = 32767;
short st = 0;
float ft = 0;
for(int i=0;i<rawData.Length;i+=2)
{
st = BitConverter.ToInt16(rawData,i);
ft = st / rescaleFactor;
samples[i / 2] = ft;
}
第二步就很简单了,创建clip
需要注意采样率和是否是多通道
AudioClip audioClip = AudioClip.Create("mySound", samples.Length, 1, 16000, false, false);
第三步,使用SetData
audioClip.SetData(samples, 0);