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); }
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"; } } }
void Envelope::setSustain_dB(float sustain_dB){ this->sustainGain = dB2gain(sustain_dB); this->sustain_dB = sustain_dB; }