public void gate(bool gate) { if (gate) { state = envState.env_attack; } else if (state != envState.env_idle) { state = envState.env_release; } }
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); }
public void reset() { state = envState.env_idle; output = 0.0f; }