public void DataProcess(int time = 100, int samplesize = 128) { processbar = 10; //拆分数据,time即采样间隔时间,单位毫秒,samplesize为fft结果的数据数量=_spec,采样数据数量为sanplesize*2,取每个间隔分段的钱samplesize位 int SamplePerFrame = time; //Mathf.FloorToInt ( time*_audio.clip.frequency / 1000);//每帧间隔的数据数量 //从第一个非0数据开始 int si = 0; bool offsetfound = false; while (!offsetfound && si < samples.Length) { si++; if (samples [si] != 0) { offsetfound = true; } } if (TxTProcess != null) { TxTProcess.text = "processing 10 %"; } float offset = si * _audio.clip.frequency; /////////////////第一个非0数据所在的时间 int NumOfFrame = Mathf.FloorToInt((samples.Length - si) / SamplePerFrame); //拆分出的数据数量,相当于帧数 freqlength = Mathf.FloorToInt(samplesize * _audio.clip.frequency / AudioSettings.outputSampleRate); //有效频率数量 fft.FFTManagerinit(samplesize * 2, FFT.datafilter.unityspec); //初始化fft Debug.LogError("offset=" + si + " = " + offset + "SamplePerFrame= " + SamplePerFrame + "--systemtime=" + Time.realtimeSinceStartup); for (int i = 0; i < NumOfFrame; i++) { //帧数 float[] separatedData = new float[samplesize * 2]; //每次采样的数据数量,为了保证fft结果数量为samplesize,数量取两倍 int startindex = si + i * SamplePerFrame; //开始采样的编号 for (int j = 0; j < samplesize * 2; j++) { //采样samplesize*2次 if (startindex + j < samples.Length) { //编号有效 separatedData [j] = samples [startindex + j]; } else { //超出范围则置0 separatedData [j] = 0; } } float [] result = fft.CalNFFT(fft.windowBlackman(separatedData)); //将采样数据做fft,长度为samplesize float[] bands = new float[_numBands + 1]; bands = CalcCurrentFrameAvg(result); //按频段拆分,计算当前帧平均值,存入band bands [_numBands] = (float)startindex / _audio.clip.frequency; //startindex所在时间,单位为秒 BeatAnalysisManager.MAL.Add(bands); //存入MAL if (TxTProcess != null) { processbar = Mathf.Min(Mathf.RoundToInt(90f * i / NumOfFrame) + 10, 100); TxTProcess.text = "processing " + processbar + " %"; } } //end 采样samplesize*2次 Debug.LogError("end process--systemtime=" + Time.realtimeSinceStartup); } //end dataprocess ,band存入MAL