Unity Microphone 录音时 检测声音大小

刚开始以为只取录音时的最后一个sample来判断音量大小,发现都检测不到。

后来搜索了一下,原来需要取一段sample来判断,有的是这一段取平均值作为音量大小。我这里是取出一段sample中的峰值(peak)作为音量

audio.clip.GetData 得到的值是0-1,所以 我乘上 99 来把音量分为四个等级(0-24-49-74-99)

 

 1 public float Volume

 2 {

 3     get

 4     {

 5         if (Microphone.IsRecording(null))

 6         {

 7             // 采样数

 8             int sampleSize = 128;

 9             float[] samples = new float[sampleSize];

10             int startPosition = Microphone.GetPosition(null) - (sampleSize+1);

11             // 得到数据

12             this.audio.clip.GetData(samples, startPosition);

13 

14             // Getting a peak on the last 128 samples

15             float levelMax = 0;

16             for (int i = 0; i < sampleSize; ++i)

17             {

18                 float wavePeak = samples[i];

19                 if (levelMax < wavePeak)

20                     levelMax = wavePeak;

21             }

22 

23             return levelMax * 99;

24         }

25         return 0;

26     }

27 }

 

你可能感兴趣的:(OPhone)