Example #1
0
Envelope::Envelope()
    : sampleRate(44100), gain(0), state(OFF), releaseSeconds(0)
    , attackSeconds(0), decaySeconds(0)
    , sustain_dB(MIN_GAIN_DB), minGain_dB(MIN_GAIN_DB)
{
    sustainGain = minGain = dB2gain(MIN_GAIN_DB);
    setReleaseSeconds(0.5);
    setAttackSeconds(1);
}
EffectProcessor::EffectProcessor()
    : AudioProcessor()
    , gain(0)
    , gainChange(0)
    , state(OFF)
    , height(0)
    , width(0)
    , ratio(0)
{
    minGain = dB2gain(MIN_GAIN_DB);
}
Example #3
0
void Envelope::setState(State state){
    this->state = state;
    // avoid division by zero
    if (state == ATTACK && attackSeconds == 0){
        setState(DECAY);
        qDebug() << attackSeconds;
    }
    else if (state == DECAY && decaySeconds == 0){
        setState(SUSTAIN);
    }
    else if (state == RELEASE && releaseSeconds == 0){
        setState(OFF);
    }
    else {
        if (state == OFF){
            gain = 0;
            qDebug() << "OFF";
        }
        if (state == ATTACK){
            float gainChange_dB = fabs(MIN_GAIN_DB) / (attackSeconds * sampleRate);
            gainChange = dB2gain(gainChange_dB);
            gain = minGain;
        }
        if (state == DECAY){
            gain = 1;
            float gainChange_dB = fabs(sustain_dB) / (decaySeconds * sampleRate);
            gainChange = 1/dB2gain(gainChange_dB);
        }
        if (state == RELEASE){
            float gainChange_dB = fabs(sustain_dB - MIN_GAIN_DB)/(sampleRate * releaseSeconds);
            gainChange =  1/dB2gain(gainChange_dB);
        }
        if (state == SUSTAIN){
            gain = sustainGain;
            gainChange = 1;
            qDebug() << "SUSTAIN";
        }
    }
}
Example #4
0
void Envelope::setSustain_dB(float sustain_dB){
    this->sustainGain = dB2gain(sustain_dB);
    this->sustain_dB = sustain_dB;
}