PriProduce CheckCanProduce() { PriProduce prim = new PriProduce(); //List<PriProduce> prim = new List<PriProduce>(); //紀錄所有合格 [頻率,level] //從中找到最高頻率音階回傳 float[,] _qualifiedLevel = new float[8, 2]; float FreAvg = 0; for (int j = 0; j < 512; j++) { FreAvg += AudioPeer._samples[j]; } FreAvg /= 512; for (int i = 0; i < 8; i++) { if (AudioPeer._audioBand[i] >= FreAvg) { //return true; _qualifiedLevel[i, 0] = AudioPeer._audioBand[i]; _qualifiedLevel[i, 1] = i; if (prim.HighestFrequency < _qualifiedLevel[i, 0]) { prim.HighestFrequency = _qualifiedLevel[i, 0]; //prim.HighestFreLevel[prim.j] = (int)_qualifiedLevel[i, 1]; prim.j++; } } } for (int i = 0; i < prim.j; i++) { //合格的音階如果在誤差值內=> 記錄下來一同輸出 if (Mathf.Abs(_qualifiedLevel[i, 0] - prim.HighestFrequency) <= FreDeviation) { prim.HighestFreLevel.Add((int)_qualifiedLevel[i, 1]); } } prim.CanProduce = (prim.HighestFrequency == 0) ? false : true; return(prim); }
private void Update() { PriProduce pri = new PriProduce(); //判斷各音階是否符合產生資格 pri = CheckCanProduce(); for (int i = 0; i < pri.HighestFreLevel.Count; i++) { if (CanProduce[i] && GM.instance.audioSource.isPlaying) { //IsProduceInterOver = false; ProduceBobble(i); //StartCoroutine(ProduceInter(pri.HighestFreLevel[i], GapTime)); //produceControls[i].IsGapTimeOver = false; CanProduce[i] = false; //Debug.Log("Level" + pri.HighestFreLevel[i] + " CanProduce[" + i + "] " + CanProduce[i] + " IsGapTimeOver " + produceControls[i].IsGapTimeOver); } //Debug.Log(Cells[i] + " " + Cells[i].transform.childCount); #region /* * if (CanProduce[i] && produceControls[i].IsGapTimeOver * && pri.CanProduce && Cells[i].transform.childCount<2 && GM.instance.audioSource.isPlaying) { * Debug.Log(Cells[i]+" " + Cells[i].transform.childCount); * //IsProduceInterOver = false; * * StartCoroutine(ProduceInter(pri.HighestFreLevel[i], GapTime)); * produceControls[i].IsGapTimeOver = false; * CanProduce[i] = false; * * }*/ #endregion } }