/// <summary>
    /// 更新インテンシティデータをエディタ上でも反映させていくようにする
    /// </summary>
    /// <param name="reCalcDataPackage">更新データ</param>
    /// <returns></returns>
    private IEnumerator UpdateEditor(ReCalcTransientDataPackage reCalcTransientDataPackage)
    {
        int frame = reCalcTransientDataPackage.iintensityList.Count / reCalcTransientDataPackage.storageNum;
        for (int i = 0; i < reCalcTransientDataPackage.storageNum; i++)
        {

            if (intensities.ContainsKey(reCalcTransientDataPackage.sendNums[i]))
            {
                var pushObj = intensities[reCalcTransientDataPackage.sendNums[i]];
                //色変更を行う
                pushObj.transform.localRotation = Quaternion.LookRotation(10000000000 * reCalcTransientDataPackage.intensities[i]);
                var lv = AcousticMathNew.CalcuIntensityLevel(reCalcTransientDataPackage.intensities[i]);
                pushObj.transform.GetComponent<Renderer>().material.color = ColorBar.DefineColor(MeasurementParameter.colormapID, lv, MeasurementParameter.MinIntensity, MeasurementParameter.MaxIntensity);
                //瞬時音響インテンシティの変更

                var intensityDirection = new Vector3[frame];
                float[] intensityLv = new float[frame];
                for (int j = 0; j < frame; j++)
                {
                    intensityDirection[j] = reCalcTransientDataPackage.iintensityList[i * frame + j];
                    intensityLv[j] = MathFFTW.CalcuIntensityLevel(intensityDirection[j]);
                }

                var parameter = pushObj.GetComponent<ParameterStorage>();
                parameter.PutIntensity(intensityDirection, intensityLv);
                yield return null;
            }
        }
        yield return null;
    }
Beispiel #2
0
    public void DataLoad()
    {
        //jsonファイルを探してSaveData型で読み込む
        string json = null;

        dataPath = Application.persistentDataPath + "/" + saveDataPath.text;
        Debug.Log("DataPath is" + dataPath);
        if (File.Exists(dataPath))
        {
            json = File.ReadAllText(dataPath);

            LoadElem = (SaveData)JsonUtility.FromJson(json, typeof(SaveData));
        }
        else
        {
            Debug.Log("DataPath: " + dataPath + " is null");
        }

        //オブジェクトを生成する
        for (int i = 0; i < LoadElem.intensLev.Length; i++)
        {
            measurePoint = new GameObject();
            measurePoint.transform.parent        = standardTarget.transform;
            measurePoint.transform.localPosition = new Vector3(LoadElem.micPosx[i], LoadElem.micPosy[i], LoadElem.micPosz[i]);
            measurePoint.transform.localRotation = new Quaternion(LoadElem.micRotx[i], LoadElem.micRoty[i], LoadElem.micRotz[i], LoadElem.micRotw[i]);
            measurePoint.transform.name          = "measurepoint" + i;

            //コーンの色を指定
            Color vecObjColor = ColorBar.DefineColor(LoadElem.colorMap, LoadElem.intensLev[i], LoadElem.minRange, LoadElem.maxRange);

            // intensityObj = new GameObject();
            Vector3 intensity = new Vector3(LoadElem.intensx[i], LoadElem.intensy[i], LoadElem.intensz[i]);
            intensityObj = CreateVecObj(prefab, measurePoint, intensity, LoadElem.size, vecObjColor);
        }
    }
    /// <summary>
    /// テストコード
    /// </summary>
    /// <param name="sendPosition"></param>
    public void MicPosReceivedTester(SendPosition sendPosition)
    {
        if (CheckPlotDistance(sendPosition.sendPos))
        {
            GameObject micPoint = new GameObject("measurementPoint" + Num);
            micPoint.transform.parent        = copyStandard.transform;
            micPoint.transform.localPosition = sendPosition.sendPos;
            micPoint.transform.localRotation = sendPosition.sendRot;

            //intensity計算(テストコード)
            var   intensityDir   = Vector3.one;
            float intensityLv_dB = 82f;

            //オブジェクト作成
            var vectorObj = Instantiate(Cone) as GameObject;
            vectorObj.transform.localScale    = new Vector3(MeasurementParameter.objSize, MeasurementParameter.objSize, MeasurementParameter.objSize * 4);
            vectorObj.transform.parent        = micPoint.transform;
            vectorObj.transform.localPosition = Vector3.zero;
            vectorObj.transform.localRotation = Quaternion.LookRotation(10000000000 * intensityDir);
            var vecColor = ColorBar.DefineColor(MeasurementParameter.colormapID, intensityLv_dB, MeasurementParameter.MinIntensity, MeasurementParameter.MaxIntensity);
            vectorObj.transform.GetComponent <Renderer>().material.color = vecColor;
            vectorObj.name = "IntensityObj";
            intensities.Add(Num, vectorObj);

            //データそのものを保管
            double[][]  soundSignals = new double[4][];
            DataStorage data         = new DataStorage(Num, sendPosition.sendPos, sendPosition.sendRot, soundSignals, intensityDir);
            dataStorages.Add(Num, data);

            //送信データを作成

            Num++;
        }
    }
        private IEnumerator RecordSignal(Vector3 sendPos, Quaternion sendRot)
        {
            //音声再生
            //AsioManager.startSound();
            //録音のlengthbit分待つ
            yield return(new WaitForSeconds(4096f / 44100f));

            //録音開始
            soundSignals = AsioManager.GetAsioSoundSignals(isampleLength);

            //瞬時音響インテンシティ計算
            var intensityDirection = AcousticSI.DirectMethod(soundSignals, SettingManager.AtmDensity, SettingManager.micInterval);

            //直接法計算
            var sumIntensity = AcousticSI.SumIntensity(intensityDirection);

            sintensities.Add(AcousticMathNew.CalcuIntensityLevel(sumIntensity));
            //データ送信
            client.Send("ResultSend", sendPos.x, sendPos.y, sendPos.z, sendRot.x, sendRot.y, sendRot.z, sendRot.w, sumIntensity.x, sumIntensity.y, sumIntensity.z, Num);
            yield return(null);

            //PCがわ表示
            float[] intensityLv = new float[intensityDirection.Length];
            for (int i = 0; i < intensityDirection.Length; i++)
            {
                intensityLv[i] = AcousticMathNew.CalcuIntensityLevel(intensityDirection[i]);
            }
            Color       color   = ColorBar.DefineColor(SettingManager.colormapID, AcousticMathNew.CalcuIntensityLevel(sumIntensity), SettingManager.lvMin, SettingManager.lvMax);
            GameObject  instant = CreateInstantObj(Num, sendPos, sendRot, sumIntensity, color, intensityDirection, intensityLv);
            DataStorage data    = new DataStorage(Num, sendPos, sendRot, soundSignals, sumIntensity);

            dataStorages.Add(data);
            Num++;
            yield return(null);
        }
 // Update is called once per frame
 void Update()
 {
     if (Input.GetKey(KeyCode.O))
     {
         ParameterChange();
         CallIntensity();
     }
     if (Input.GetKey(KeyCode.P))
     {
         ParameterChange();
         CallIntensityBack();
     }
     if (Input.GetKeyDown(KeyCode.I))
     {
         Vector3 sum = Vector3.zero;
         for (int count = 0; count < soundIntensity.Length; count++)
         {
             sum += soundIntensity[count];
         }
         var sumLevel = AcousticMathNew.CalcuIntensityLevel(sum);
         Debug.Log("Sound intensity of average is " + sumLevel);
         transform.localRotation = Quaternion.LookRotation(sum * 10000000000);
         transform.localScale    = new Vector3(MeasurementParameter.objSize, MeasurementParameter.objSize, MeasurementParameter.objSize * 4);
         Color vecObjColor = ColorBar.DefineColor(1, sumLevel, MeasurementParameter.lvMin, MeasurementParameter.lvMax);
         gameObject.GetComponent <Renderer>().material.color = vecObjColor;
         i = 0;
     }
 }
 private void setColor()
 {
     color = ColorBar.DefineColor(2, IntesityLevel(), 0, 86);
     if (material != null)
     {
         material.color = color;
     }
 }
    void ParameterChange()
    {
        transform.localRotation = Quaternion.LookRotation(soundIntensity[i] * 10000000000);
        transform.localScale    = new Vector3(MeasurementParameter.objSize, MeasurementParameter.objSize, MeasurementParameter.objSize * 4);
        Color vecObjColor = ColorBar.DefineColor(1, intensityLevel[i], MeasurementParameter.lvMin, MeasurementParameter.lvMax);

        gameObject.GetComponent <Renderer>().material.color = vecObjColor;
    }
    // Use this for initialization
    void Start()
    {
        soundSignals = ReadNoise();
        atmDensity   = CalculateAtmDensity(atm, temp);
        intensities  = MakeIntensity(soundSignals);
        OutputObj    = GameObject.Instantiate(prefab) as GameObject;
        OutputObj.transform.localPosition = Vector3.zero;
        OutputObj.transform.localRotation = Quaternion.LookRotation(10000000000 * intensities[0]);
        OutputObj.transform.localScale    = new Vector3(1, 1, 4);
        float intensityLevel = AcousticMathNew.CalcuIntensityLevel(intensities[0]);
        Color vecColor       = ColorBar.DefineColor(1, intensityLevel, lv_min, lv_max);

        OutputObj.transform.GetComponent <Renderer>().material.color = vecColor;
        OutputObj.name = "VectorObject";
    }
 /// <summary>
 /// 更新インテンシティデータをエディタ上でも反映させていくようにする
 /// </summary>
 /// <param name="reCalcDataPackage">更新データ</param>
 /// <returns></returns>
 private IEnumerator UpdateEditor(ReCalcDataPackage reCalcDataPackage)
 {
     for (int i = 0; i < reCalcDataPackage.storageNum; i++)
     {
         if (intensities.ContainsKey(reCalcDataPackage.sendNums[i]))
         {
             var pushObj = intensities[reCalcDataPackage.sendNums[i]];
             //色変更を行う
             pushObj.transform.localRotation = Quaternion.LookRotation(10000000000 * reCalcDataPackage.intensities[i]);
             var lv = AcousticMathNew.CalcuIntensityLevel(reCalcDataPackage.intensities[i]);
             pushObj.transform.GetComponent <Renderer>().material.color = ColorBar.DefineColor(MeasurementParameter.colormapID, lv, MeasurementParameter.MinIntensity, MeasurementParameter.MaxIntensity);
             yield return(null);
         }
     }
     yield return(null);
 }
        // Use this for initialization
        void Start()
        {
            //データの読み込み
            ReadTestData();

            //瞬時音響インテンシティ計算
            var intensityDirection = AcousticSI.DirectMethod(signal, atmD, micD);

            //直接法計算
            var sumIntensity = AcousticSI.SumIntensity(intensityDirection);

            float[] intensityLv = new float[intensityDirection.Length];
            for (int i = 0; i < intensityDirection.Length; i++)
            {
                intensityLv[i] = AcousticMathNew.CalcuIntensityLevel(intensityDirection[i]);
            }
            Color      color   = ColorBar.DefineColor(2, AcousticMathNew.CalcuIntensityLevel(sumIntensity), 65, 105);
            GameObject instant = CreateInstantObj(sumIntensity, color, intensityDirection, intensityLv);
        }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.L))
        {
            n++;
            if (n == intensities.Length)
            {
                n = 0;
            }
            OutputObj.transform.localRotation = Quaternion.LookRotation(10000000000 * intensities[n]);
            float intensityLevel = AcousticMathNew.CalcuIntensityLevel(intensities[n]);
            Color vecColor       = ColorBar.DefineColor(1, intensityLevel, lv_min, lv_max);

            OutputObj.transform.GetComponent <Renderer>().material.color = vecColor;
            Debug.Log(intensities[n].x + "," + intensities[n].y + "," + intensities[n].z);
            Debug.Log(intensityLevel);
            Debug.Log("Display No." + n);
        }
    }
    public IntensityPackage MicPosReceived(SendPosition sendPosition)
    {
        if (CheckPlotDistance(sendPosition.sendPos))
        {
            GameObject micPoint = new GameObject("measurementPoint" + Num);
            micPoint.transform.parent        = copyStandard.transform;
            micPoint.transform.localPosition = sendPosition.sendPos;
            micPoint.transform.localRotation = sendPosition.sendRot;
            // 音声取得
            var soundSignals = asiocsharpdll.GetAsioSoundSignals(MeasurementParameter.SampleNum, MeasurementParameter.CalibValue);
            //intensity計算
            var intensityDir = AcousticMathNew.CrossSpectrumMethod(soundSignals, MeasurementParameter.Fs, length_bit,
                                                                   MeasurementParameter.FreqMin, MeasurementParameter.FreqMax, MeasurementParameter.AtmDensity, MeasurementParameter.MInterval);
            float intensityLv_dB = AcousticMathNew.CalcuIntensityLevel(intensityDir);

            //オブジェクト作成
            var vectorObj = Instantiate(Cone) as GameObject;
            vectorObj.transform.localScale    = new Vector3(MeasurementParameter.objSize, MeasurementParameter.objSize, MeasurementParameter.objSize * 4);
            vectorObj.transform.parent        = micPoint.transform;
            vectorObj.transform.localPosition = Vector3.zero;
            vectorObj.transform.localRotation = Quaternion.LookRotation(10000000000 * intensityDir);
            var vecColor = ColorBar.DefineColor(MeasurementParameter.colormapID, intensityLv_dB, MeasurementParameter.MinIntensity, MeasurementParameter.MaxIntensity);
            vectorObj.transform.GetComponent <Renderer>().material.color = vecColor;
            vectorObj.name = "IntensityObj";
            intensities.Add(Num, vectorObj);

            //データそのものを保管
            DataStorage data = new DataStorage(Num, sendPosition.sendPos, sendPosition.sendRot, soundSignals, intensityDir);
            dataStorages.Add(Num, data);

            //送信データを作成
            var sendData = new IntensityPackage(sendPosition, intensityDir, Num);
            Num++;
            return(sendData);
        }
        else
        {
            return(new IntensityPackage());
        }
    }
        private IEnumerator DataProcess(Message message)
        {
            //PCからマイクの座標+回転+三次元インテンシティの10要素を取得
            //address
            var msg = message.address;

            Debug.Log("Catch the address: " + msg);
            yield return(null);

            if (msg == "ResultSend" && UIManager._instance)
            {
                //value
                foreach (var value in message.values)
                {
                    transformData.Add(value.ToString());
                }

                Vector3 Intensity = new Vector3(float.Parse(transformData[i + 7]), float.Parse(transformData[i + 8]), float.Parse(transformData[i + 9]));

                float intensityLv = AIMath.CalcuIntensityLevel(Intensity);

                //インテンシティレベルが指定した範囲内なら
                if (intensityLv >= UIManager.LevelMin || intensityLv <= UIManager.LevelMax)
                {
                    //コーンの色を指定
                    Color vecObjColor = ColorBar.DefineColor(UIManager.ColorMapID, intensityLv, UIManager.LevelMin, UIManager.LevelMax);
                    micPos = new Vector3(float.Parse(transformData[i]), float.Parse(transformData[i + 1]), float.Parse(transformData[i + 2]));
                    micRot = new Quaternion(float.Parse(transformData[i + 3]), float.Parse(transformData[i + 4]), float.Parse(transformData[i + 5]), float.Parse(transformData[i + 6]));
                    instanceManager.CreateInstantObj(int.Parse(transformData[i + 10]), micPos, micRot, Intensity, vecObjColor, UIManager.ObjSIze);
                    measureID.Add(int.Parse(transformData[i + 10]));
                    Debug.Log(DateTime.Now.ToString("MM/dd/HH:mm:ss.fff") + "Display measurement point No." + transformData[i + 10]);
                }
                // positionSender.delaySend(int.Parse(transformData[i + 10]), DateTime.Now);
                i += 11;
                yield return(null);
            }
            else if (msg == "SharingStart")
            {
                UIManager.ColorMapID = int.Parse(message.values[0].ToString());
                UIManager.LevelMin   = float.Parse(message.values[1].ToString());
                UIManager.LevelMax   = float.Parse(message.values[2].ToString());
                UIManager.ObjSIze    = float.Parse(message.values[3].ToString());
                manager.ReadyShare();
                yield return(null);
            }
            else if (msg == "ReSend")
            {
                //value
                foreach (var value in message.values)
                {
                    transformData.Add(value.ToString());
                }
                if (!measureID.Exists(x => x == int.Parse(transformData[i + 10])))
                {
                    Vector3 Intensity = new Vector3(float.Parse(transformData[i + 7]), float.Parse(transformData[i + 8]), float.Parse(transformData[i + 9]));

                    float intensityLv = AIMath.CalcuIntensityLevel(Intensity);

                    //インテンシティレベルが指定した範囲内なら
                    if (intensityLv >= UIManager.LevelMin && intensityLv <= UIManager.LevelMax)
                    {
                        //コーンの色を指定
                        Color vecObjColor = ColorBar.DefineColor(UIManager.ColorMapID, intensityLv, UIManager.LevelMin, UIManager.LevelMax);
                        micPos = new Vector3(float.Parse(transformData[i]), float.Parse(transformData[i + 1]), float.Parse(transformData[i + 2]));
                        micRot = new Quaternion(float.Parse(transformData[i + 3]), float.Parse(transformData[i + 4]), float.Parse(transformData[i + 5]), float.Parse(transformData[i + 6]));
                        instanceManager.CreateInstantObj(int.Parse(transformData[i + 10]), micPos, micRot, Intensity, vecObjColor, UIManager.ObjSIze);
                        measureID.Add(int.Parse(transformData[i + 10]));
                        Debug.Log(DateTime.Now.ToString("MM/dd/HH:mm:ss.fff") + "Redisplay measurement point No." + transformData[i + 10]);
                    }
                }
                else
                {
                    Debug.Log("No." + transformData[i + 10] + "already display");
                }
                i += 11;
                yield return(null);
            }
            else if (msg == "Delete")
            {
                int deleteNum = int.Parse(message.values[0].ToString());
                if (measureID.Exists(x => x == deleteNum))
                {
                    Destroy(GameObject.Find("measurepoint" + deleteNum.ToString()));
                    measureID.RemoveAll(x => x == deleteNum);
                    instanceManager.DeleteVectorObj(deleteNum);
                }
                yield return(null);
            }
            else if (msg == "ColorChange")
            {
                List <Vector3> transInt = new List <Vector3>();
                List <Color>   colors   = new List <Color>();
                List <Vector3> scales   = new List <Vector3>();

                foreach (var value in message.values)
                {
                    transformData.Add(value.ToString());
                }

                for (; i < transformData.Count;)
                {
                    Vector3 Intensity   = new Vector3(float.Parse(transformData[i]), float.Parse(transformData[i + 1]), float.Parse(transformData[i + 2]));
                    int     Num         = int.Parse(transformData[i + 3]);
                    float   intensityLv = AIMath.CalcuIntensityLevel(Intensity);
                    //コーンの色を指定
                    Color ObjColor = ColorBar.DefineColor(UIManager.ColorMapID, intensityLv, UIManager.LevelMin, UIManager.LevelMax);
                    instanceManager.ChangeIntensityObj(Num, Intensity, ObjColor);
                    i += 4;
                    yield return(null);
                }
            }
            else if (msg == "Reproduct")
            {
                //value
                foreach (var value in message.values)
                {
                    transformData.Add(value.ToString());
                }
                for (; i < transformData.Count;)
                {
                    if (!measureID.Exists(x => x == int.Parse(transformData[i + 10])))
                    {
                        Vector3 Intensity = new Vector3(float.Parse(transformData[i + 7]), float.Parse(transformData[i + 8]), float.Parse(transformData[i + 9]));

                        float intensityLv = AIMath.CalcuIntensityLevel(Intensity);

                        //インテンシティレベルが指定した範囲内なら
                        if (intensityLv >= UIManager.LevelMin || intensityLv <= UIManager.LevelMax)
                        {
                            //コーンの色を指定
                            Color vecObjColor = ColorBar.DefineColor(UIManager.ColorMapID, intensityLv, UIManager.LevelMin, UIManager.LevelMax);
                            micPos = new Vector3(float.Parse(transformData[i]), float.Parse(transformData[i + 1]), float.Parse(transformData[i + 2]));
                            micRot = new Quaternion(float.Parse(transformData[i + 3]), float.Parse(transformData[i + 4]), float.Parse(transformData[i + 5]), float.Parse(transformData[i + 6]));
                            instanceManager.CreateInstantObj(int.Parse(transformData[i + 10]), micPos, micRot, Intensity, vecObjColor, UIManager.ObjSIze);
                            measureID.Add(int.Parse(transformData[i + 10]));
                        }
                    }
                    i += 11;
                    // positionSender.delaySend(int.Parse(transformData[i + 10]), DateTime.Now);
                    yield return(null);
                }
            }
        }
Beispiel #14
0
        private IEnumerator DataProcess(Message message)
        {
            //address
            var msg = message.address;

            Debug.Log("Catch the address: " + msg);
            if (msg == "ResultSend" && UIManager._instance)
            {
                //value
                foreach (var value in message.values)
                {
                    transformData.Add(value.ToString());
                }
                Vector3 Intensity = new Vector3(float.Parse(transformData[i + 7]), float.Parse(transformData[i + 8]), float.Parse(transformData[i + 9]));

                float       intensityLv = AIMath.CalcuIntensityLevel(Intensity);
                DataStorage instanceData;
                //インテンシティレベルが指定した範囲内なら
                if (intensityLv >= UIManager.LevelMin || intensityLv <= UIManager.LevelMax)
                {
                    //コーンの色を指定
                    Color vecObjColor = ColorBar.DefineColor(UIManager.ColorMapID, intensityLv, UIManager.LevelMin, UIManager.LevelMax);
                    micPos = new Vector3(float.Parse(transformData[i]), float.Parse(transformData[i + 1]), float.Parse(transformData[i + 2]));
                    micRot = new Quaternion(float.Parse(transformData[i + 3]), float.Parse(transformData[i + 4]), float.Parse(transformData[i + 5]), float.Parse(transformData[i + 6]));
                    GameObject instant = instanceManager.CreateInstantObj(int.Parse(transformData[i + 10]), micPos, micRot, Intensity, vecObjColor, UIManager.ObjSIze);
                    instanceData = new DataStorage(int.Parse(transformData[i + 10]), micPos, micRot, Intensity, intensityLv);
                    dataList.Add(instanceData);
                }
                i += 11;
                // UIManager._measure = true;
                yield return(null);
            }
            //サンプリングレート分の瞬時音響インテンシティデータの受信(No+インテンシティ)
            else if (msg == "InstanceSend")
            {
                List <Vector3> transInt = new List <Vector3>();
                List <Color>   colors   = new List <Color>();
                List <Vector3> scales   = new List <Vector3>();

                foreach (var value in message.values)
                {
                    transformData.Add(value.ToString());
                }
                int Num = int.Parse(transformData[i]);
                i++;
                int part = int.Parse(transformData[i]);
                i++;
                for (; i < transformData.Count; i += 3)
                {
                    animReady = false;
                    Vector3 Intensity   = new Vector3(float.Parse(transformData[i]), float.Parse(transformData[i + 1]), float.Parse(transformData[i + 2]));
                    float   intensityLv = AIMath.CalcuIntensityLevel(Intensity);
                    //コーンの色を指定
                    Color ObjColor = ColorBar.DefineColor(UIManager.ColorMapID, intensityLv, UIManager.LevelMin, UIManager.LevelMax);
                    transInt.Add(Intensity);
                    colors.Add(ObjColor);
                    scales.Add(DefineSize(intensityLv, UIManager.LevelMin, UIManager.LevelMax));
                }
                //オブジェクトをインテンシティに計算し終えたらデータ送信
                positionSender.CalcInstantEnd(Num);
                yield return(null);

                instanceManager.PushIntensityObj(Num, part, transInt, colors, scales);
                putNum.text = Num.ToString();
                animReady   = true;
                yield return(null);
            }
            else if (msg == "SendEnd")
            {
                uIPanelManager.DisplayReady();
                yield return(null);
            }
            else if (msg == "SettingSender")
            {
                UIManager.ColorMapID = int.Parse(message.values[0].ToString());
                UIManager.LevelMin   = float.Parse(message.values[1].ToString());
                UIManager.LevelMax   = float.Parse(message.values[2].ToString());
                UIManager.ObjSIze    = float.Parse(message.values[3].ToString());
                uIPanelManager.ReadyMeasure();
            }
        }
    private IEnumerator RecordSignal(SendPosition sendPosition)
    {
        //インテンシティオブジェクト(Server側)
        GameObject micPoint = new GameObject("measurementPoint" + Num);
        micPoint.transform.parent = copyStandard.transform;
        micPoint.transform.localPosition = sendPosition.sendPos;
        micPoint.transform.localRotation = sendPosition.sendRot;


        //音声再生
        asiocsharpdll.StartSound();
        //録音のlengthbit分待つ
        //yield return new WaitForSeconds(4096f / 44100f);
        //録音開始
        var soundSignals = asiocsharpdll.GetAsioSoundSignals(MeasurementParameter.SampleNum, MeasurementParameter.CalibValue);

        List<Vector3> intensityList = new List<Vector3>();
        //時間変化する音響インテンシティを指定したアルゴリズムを元に計算
        switch (algorithmList.value)
        {
            case 0://直接法
                intensityList.AddRange(AcousticSI.DirectMethod(soundSignals, MeasurementParameter.AtmDensity, MeasurementParameter.MInterval));
                break;
            case 1://STFTを使った時間周波数領域での計算処理
                intensityList.AddRange(MathFFTW.STFTmethod(soundSignals, MeasurementParameter.n_overlap, MeasurementParameter.i_block, MeasurementParameter.Fs, MeasurementParameter.FreqMin, MeasurementParameter.FreqMax, MeasurementParameter.AtmDensity, MeasurementParameter.MInterval));
                break;
            case 2://アンビソニックマイクを使った時間領域のpsudoIntensityの推定
                intensityList.AddRange(MathAmbisonics.TdomMethod(soundSignals, MeasurementParameter.AtmDensity, 340));
                break;
            case 3://アンビソニックマイクを使った時間周波数領域のpsudoIntensityの推定
                intensityList.AddRange(MathAmbisonics.TFdomMethod(soundSignals, MeasurementParameter.n_overlap, MeasurementParameter.i_block, MeasurementParameter.Fs, MeasurementParameter.FreqMin, MeasurementParameter.FreqMax, MeasurementParameter.AtmDensity, 340));
                break;
        }
        var intensityDirection = intensityList.ToArray();
        //直接法計算
        var sumIntensity = AcousticSI.SumIntensity(intensityDirection);
        var sumIntensityLv = MathFFTW.CalcuIntensityLevel(sumIntensity);
        yield return null;

        //PCがわ表示
        float[] intensityLv = new float[intensityDirection.Length];
        for (int i = 0; i < intensityDirection.Length; i++)
        {
            intensityLv[i] = MathFFTW.CalcuIntensityLevel(intensityDirection[i]);
        }    
        yield return null;


        //オブジェクト作成
        var vectorObj = Instantiate(Cone) as GameObject;
        vectorObj.transform.localScale = new Vector3(MeasurementParameter.objSize, MeasurementParameter.objSize, MeasurementParameter.objSize * 4);
        vectorObj.transform.parent = micPoint.transform;
        vectorObj.transform.localPosition = Vector3.zero;
        vectorObj.transform.localRotation = Quaternion.LookRotation(10000000000 * sumIntensity);
        var vecColor = ColorBar.DefineColor(MeasurementParameter.colormapID, sumIntensityLv, MeasurementParameter.MinIntensity, MeasurementParameter.MaxIntensity);
        vectorObj.transform.GetComponent<Renderer>().material.color = vecColor;
        vectorObj.name = "IntensityObj";
        var parameter = vectorObj.AddComponent<ParameterStorage>();
        parameter.PutIntensity(intensityDirection, intensityLv);
        intensities.Add(Num, vectorObj);

        //データそのものを保管
        DataStorage data = new DataStorage(Num, sendPosition.sendPos, sendPosition.sendRot, soundSignals, sumIntensity);
        dataStorages.Add(Num, data);

        //送信データを作成
        var sendData = new TransIntensityPackage(sendPosition, sumIntensity,intensityDirection, Num);
        tServerManager.SendIntensity(sendData);
        Num++;
        yield return null;
    }