Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        if (positionHistory.Count >= historySize)
        {
            positionAverage = Vector3.LerpUnclamped(positionHistory[0], positionAverage, ((float)positionHistory.Count) / (positionHistory.Count - 1));
            positionHistory.RemoveAt(0);
        }
        if (velocityHistory.Count >= historySize)
        {
            velocityAverage = Mathf.LerpUnclamped(velocityHistory[0], velocityAverage, ((float)velocityHistory.Count) / (velocityHistory.Count - 1));
            velocityHistory.RemoveAt(0);
        }


        transform.position = follow.position;

        Vector3 position = transform.position;

        positionHistory.Add(position);

        positionAverage = Vector3.LerpUnclamped(positionHistory[positionHistory.Count - 1], positionAverage, ((float)positionHistory.Count - 1) / positionHistory.Count);

        if (follow.localScale == untrackedJointScale)
        {
            velocityHistory.Add(0);
            velocityAverage = Mathf.LerpUnclamped(velocityHistory[velocityHistory.Count - 1], velocityAverage, ((float)velocityHistory.Count - 1) / velocityHistory.Count);
        }
        else
        {
            if (positionHistory.Count > 1)
            {
                float velocity = Vector3.Magnitude(position - positionHistory[positionHistory.Count - 2]) / Time.deltaTime;



                if (velocity < velocityLimit) //check if the velocity is a reasonable value
                {
                    velocityHistory.Add(velocity);

                    velocityAverage = Mathf.LerpUnclamped(velocityHistory[velocityHistory.Count - 1], velocityAverage, ((float)velocityHistory.Count - 1) / velocityHistory.Count);
                }
            }
        }


        synth.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Gain, Mathf.Lerp(gainMin, gainMax, velocityAverage / velocityMax));
        synth.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Freqcutoff, Mathf.Lerp(frequencyMin, frequencyMax, velocityAverage / velocityMax));
        synth.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Oscnote, Mathf.Lerp(noteMin, noteMax, positionAverage.y / heightMax));
        synth.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Ringmodfreq, Mathf.Lerp(ringFreqMin, ringFreqMax, positionAverage.z / heightMax));
        synth.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Ringmodmultiplier, Mathf.Lerp(ringMultMin, ringMultMax, velocityAverage / velocityMax));
    }
    public override void OnInspectorGUI()
    {
        bool isEnabled = _dsp.IsInstantiated();

        if (!isEnabled)
        {
            EditorGUILayout.LabelField("Press Play!", EditorStyles.centeredGreyMiniLabel);
        }
        GUILayout.EndVertical();

        // parameters
        GUI.enabled = true;
        GUILayout.BeginVertical();
        EditorGUILayout.Space();
        EditorGUI.indentLevel++;

        // freqCutoff
        GUILayout.BeginHorizontal();
        float freqCutoff    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Freqcutoff);
        float newFreqcutoff = EditorGUILayout.Slider("freqCutoff", freqCutoff, 0.0f, 20000.0f);

        if (freqCutoff != newFreqcutoff)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Freqcutoff, newFreqcutoff);
        }
        GUILayout.EndHorizontal();

        // gain
        GUILayout.BeginHorizontal();
        float gain    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Gain);
        float newGain = EditorGUILayout.Slider("gain", gain, 0.0f, 1.0f);

        if (gain != newGain)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Gain, newGain);
        }
        GUILayout.EndHorizontal();

        // oscNote
        GUILayout.BeginHorizontal();
        float oscNote    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Oscnote);
        float newOscnote = EditorGUILayout.Slider("oscNote", oscNote, 0.0f, 127.0f);

        if (oscNote != newOscnote)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Oscnote, newOscnote);
        }
        GUILayout.EndHorizontal();

        // ringModFreq
        GUILayout.BeginHorizontal();
        float ringModFreq    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Ringmodfreq);
        float newRingmodfreq = EditorGUILayout.Slider("ringModFreq", ringModFreq, 0.0f, 20000.0f);

        if (ringModFreq != newRingmodfreq)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Ringmodfreq, newRingmodfreq);
        }
        GUILayout.EndHorizontal();

        // ringModMultiplier
        GUILayout.BeginHorizontal();
        float ringModMultiplier    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Ringmodmultiplier);
        float newRingmodmultiplier = EditorGUILayout.Slider("ringModMultiplier", ringModMultiplier, 0.0f, 1.0f);

        if (ringModMultiplier != newRingmodmultiplier)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Ringmodmultiplier, newRingmodmultiplier);
        }
        GUILayout.EndHorizontal();

        // sawMult
        GUILayout.BeginHorizontal();
        float sawMult    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sawmult);
        float newSawmult = EditorGUILayout.Slider("sawMult", sawMult, 0.0f, 1.0f);

        if (sawMult != newSawmult)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sawmult, newSawmult);
        }
        GUILayout.EndHorizontal();

        // sawOffset
        GUILayout.BeginHorizontal();
        float sawOffset    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sawoffset);
        float newSawoffset = EditorGUILayout.Slider("sawOffset", sawOffset, -24.0f, 24.0f);

        if (sawOffset != newSawoffset)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sawoffset, newSawoffset);
        }
        GUILayout.EndHorizontal();

        // sinMult
        GUILayout.BeginHorizontal();
        float sinMult    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sinmult);
        float newSinmult = EditorGUILayout.Slider("sinMult", sinMult, 0.0f, 1.0f);

        if (sinMult != newSinmult)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sinmult, newSinmult);
        }
        GUILayout.EndHorizontal();

        // sinOffset
        GUILayout.BeginHorizontal();
        float sinOffset    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sinoffset);
        float newSinoffset = EditorGUILayout.Slider("sinOffset", sinOffset, -24.0f, 24.0f);

        if (sinOffset != newSinoffset)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sinoffset, newSinoffset);
        }
        GUILayout.EndHorizontal();

        // sqrMult
        GUILayout.BeginHorizontal();
        float sqrMult    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sqrmult);
        float newSqrmult = EditorGUILayout.Slider("sqrMult", sqrMult, 0.0f, 1.0f);

        if (sqrMult != newSqrmult)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sqrmult, newSqrmult);
        }
        GUILayout.EndHorizontal();

        // sqrOffset
        GUILayout.BeginHorizontal();
        float sqrOffset    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sqroffset);
        float newSqroffset = EditorGUILayout.Slider("sqrOffset", sqrOffset, -24.0f, 24.0f);

        if (sqrOffset != newSqroffset)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Sqroffset, newSqroffset);
        }
        GUILayout.EndHorizontal();

        // triMult
        GUILayout.BeginHorizontal();
        float triMult    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Trimult);
        float newTrimult = EditorGUILayout.Slider("triMult", triMult, 0.0f, 1.0f);

        if (triMult != newTrimult)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Trimult, newTrimult);
        }
        GUILayout.EndHorizontal();

        // triOffset
        GUILayout.BeginHorizontal();
        float triOffset    = _dsp.GetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Trioffset);
        float newTrioffset = EditorGUILayout.Slider("triOffset", triOffset, -24.0f, 24.0f);

        if (triOffset != newTrioffset)
        {
            _dsp.SetFloatParameter(Hv_quadSynth_AudioLib.Parameter.Trioffset, newTrioffset);
        }
        GUILayout.EndHorizontal();
        EditorGUI.indentLevel--;
    }