// see Hv_dropletMax_AudioLib.Parameter for definitions
    public float GetFloatParameter(Hv_dropletMax_AudioLib.Parameter param)
    {
        switch (param)
        {
        case Parameter.Attack: return(attack);

        case Parameter.Bandpass: return(bandpass);

        case Parameter.Cutoff: return(cutoff);

        case Parameter.Decay: return(decay);

        case Parameter.Gain: return(gain);

        case Parameter.Noise: return(noise);

        case Parameter.Oscnote: return(oscNote);

        case Parameter.Qbase: return(qBase);

        case Parameter.Qenvelope: return(qEnvelope);

        case Parameter.Sawmult: return(sawMult);

        case Parameter.Sawoffset: return(sawOffset);

        case Parameter.Sinmult: return(sinMult);

        case Parameter.Sinoffset: return(sinOffset);

        case Parameter.Sqrmult: return(sqrMult);

        case Parameter.Sqroffset: return(sqrOffset);

        case Parameter.Trimult: return(triMult);

        case Parameter.Trioffset: return(triOffset);

        default: return(0.0f);
        }
    }
    public void SetFloatParameter(Hv_dropletMax_AudioLib.Parameter param, float x)
    {
        switch (param)
        {
        case Parameter.Attack: {
            x      = Mathf.Clamp(x, 1.0f, 2000.0f);
            attack = x;
            break;
        }

        case Parameter.Bandpass: {
            x        = Mathf.Clamp(x, 0.0f, 1.0f);
            bandpass = x;
            break;
        }

        case Parameter.Cutoff: {
            x      = Mathf.Clamp(x, 0.0f, 20000.0f);
            cutoff = x;
            break;
        }

        case Parameter.Decay: {
            x     = Mathf.Clamp(x, 0.0f, 4000.0f);
            decay = x;
            break;
        }

        case Parameter.Gain: {
            x    = Mathf.Clamp(x, 0.0f, 1.0f);
            gain = x;
            break;
        }

        case Parameter.Noise: {
            x     = Mathf.Clamp(x, 0.0f, 1.0f);
            noise = x;
            break;
        }

        case Parameter.Oscnote: {
            x       = Mathf.Clamp(x, 0.0f, 127.0f);
            oscNote = x;
            break;
        }

        case Parameter.Qbase: {
            x     = Mathf.Clamp(x, 0.0f, 20.0f);
            qBase = x;
            break;
        }

        case Parameter.Qenvelope: {
            x         = Mathf.Clamp(x, 0.0f, 20.0f);
            qEnvelope = x;
            break;
        }

        case Parameter.Sawmult: {
            x       = Mathf.Clamp(x, 0.0f, 1.0f);
            sawMult = x;
            break;
        }

        case Parameter.Sawoffset: {
            x         = Mathf.Clamp(x, -24.0f, 24.0f);
            sawOffset = x;
            break;
        }

        case Parameter.Sinmult: {
            x       = Mathf.Clamp(x, 0.0f, 1.0f);
            sinMult = x;
            break;
        }

        case Parameter.Sinoffset: {
            x         = Mathf.Clamp(x, -24.0f, 24.0f);
            sinOffset = x;
            break;
        }

        case Parameter.Sqrmult: {
            x       = Mathf.Clamp(x, 0.0f, 1.0f);
            sqrMult = x;
            break;
        }

        case Parameter.Sqroffset: {
            x         = Mathf.Clamp(x, -24.0f, 24.0f);
            sqrOffset = x;
            break;
        }

        case Parameter.Trimult: {
            x       = Mathf.Clamp(x, 0.0f, 1.0f);
            triMult = x;
            break;
        }

        case Parameter.Trioffset: {
            x         = Mathf.Clamp(x, -24.0f, 24.0f);
            triOffset = x;
            break;
        }

        default: return;
        }
        if (IsInstantiated())
        {
            _context.SendFloatToReceiver((uint)param, x);
        }
    }