/// <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++;
        }
    }
Example #2
0
    IEnumerator SendIntensity(SendPosition position)
    {
        //送信するインテンシティオブジェクトに変換
        sendIntensityData = intensityManager.MicPosReceived(position);
        yield return(null);

        if (sendIntensityData.sendType == SendType.Intensity)
        {
            tServer.SendAllClient(transferData.SerializeJson <IntensityPackage>(sendIntensityData));
            logPanelManager.WriteConsole(sendIntensityData.num, sendIntensityData.sendPos, sendIntensityData.intensity);
        }
        yield return(null);
    }
    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());
        }
    }
Example #4
0
 void Start()
 {
     position = (GameObject.FindGameObjectWithTag("LeapMotion") as GameObject).GetComponent(typeof(SendPosition)) as SendPosition;
 }
    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;
    }
 public void MicPosReceived(SendPosition sendPosition)
 {
     StartCoroutine(RecordSignal(sendPosition));
 }