예제 #1
0
    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);
    }
예제 #2
0
    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
        }
    }