예제 #1
0
 public void gate(bool gate)
 {
     if (gate)
     {
         state = envState.env_attack;
     }
     else if (state != envState.env_idle)
     {
         state = envState.env_release;
     }
 }
예제 #2
0
    public float process()
    {
        switch (state)
        {
        case envState.env_idle:
            break;

        case envState.env_attack:
            output = attackBase + output * attackCoef;
            if (output >= 1.0f)
            {
                output = 1.0f;
                state  = envState.env_decay;
            }
            break;

        case envState.env_decay:
            output = decayBase + output * decayCoef;
            if (output <= sustainLevel)
            {
                output = sustainLevel;
                state  = envState.env_sustain;
            }
            break;

        case envState.env_sustain:
            break;

        case envState.env_release:
            output = releaseBase + output * releaseCoef;
            if (output <= 0.0f)
            {
                output = 0.0f;
                state  = envState.env_idle;
            }
            break;
        }
        return(output);
    }
예제 #3
0
 public void reset()
 {
     state  = envState.env_idle;
     output = 0.0f;
 }