diff --git a/inc/ADSR.h b/inc/ADSR.h index a33aa8d..71c3acf 100644 --- a/inc/ADSR.h +++ b/inc/ADSR.h @@ -3,18 +3,14 @@ #include "Ramp.h" #include -struct ADSRParameters { - float attack_time; // Attack time in seconds - float decay_time; // Decay time in seconds - float sustain_level; // Sustain level (0 to 1) - float release_time; -}; - -enum ADSRState { sOff, sAttack, sDecay, sSustain, sRelease }; - class ADSR : public Effect { + enum ADSRState { sOff, sAttack, sDecay, sSustain, sRelease }; + private: - ADSRParameters m_parameters; + float m_attack_time; + float m_decay_time; + float m_sustain_level; + float m_release_time; ADSRState m_state; Ramp* m_ramp; @@ -26,7 +22,6 @@ class ADSR : public Effect { public: ADSR(/* args */); - ADSR(ADSRParameters param); ~ADSR(); void Trigger() override; void Release() override; diff --git a/src/ADSR.cpp b/src/ADSR.cpp index ad9c140..9f043a9 100644 --- a/src/ADSR.cpp +++ b/src/ADSR.cpp @@ -3,15 +3,13 @@ #include "Settings.h" ADSR::ADSR(/* args */) { - m_parameters.attack_time = 1.f; - m_parameters.decay_time = 0.4f; - m_parameters.sustain_level = 0.6f; - m_parameters.release_time = 0.8f; + m_attack_time = 1.f; + m_decay_time = 0.4f; + m_sustain_level = 0.6f; + m_release_time = 0.8f; m_ramp = new Ramp(0, SAMPLE_RATE); } -ADSR::ADSR(ADSRParameters param) { m_parameters = param; } - ADSR::~ADSR() { delete m_ramp; } bool ADSR::is_attack_elapsed() { @@ -31,8 +29,7 @@ void ADSR::recheck_state() { case sAttack: if (is_attack_elapsed()) { m_state = sDecay; - m_ramp->RampTo(m_parameters.sustain_level, - m_parameters.decay_time); + m_ramp->RampTo(m_sustain_level, m_decay_time); } break; case sDecay: @@ -58,7 +55,7 @@ void ADSR::process_sample(float* sample) { } else if (m_state == sDecay) { (*sample) = (*sample) * m_ramp->Process(); } else if (m_state == sSustain) { - (*sample) = (*sample) * m_parameters.sustain_level; + (*sample) = (*sample) * m_sustain_level; } else if (m_state == sRelease) { (*sample) = (*sample) * m_ramp->Process(); } @@ -72,13 +69,13 @@ void ADSR::Trigger() { m_state = sAttack; }; - m_ramp->RampTo(1, m_parameters.attack_time); + m_ramp->RampTo(1, m_attack_time); } void ADSR::Release() { write_log("Unset ADSR\n"); m_state = sRelease; - m_ramp->RampTo(0, m_parameters.release_time); + m_ramp->RampTo(0, m_release_time); } void ADSR::Process(std::vector& samples) { @@ -90,8 +87,8 @@ void ADSR::Process(std::vector& samples) { void ADSR::SetParameters(float attack, float decay, float sustain, float release) { - m_parameters.attack_time = attack; - m_parameters.decay_time = decay; - m_parameters.sustain_level = sustain; - m_parameters.release_time = release; + m_attack_time = attack; + m_decay_time = decay; + m_sustain_level = sustain; + m_release_time = release; } \ No newline at end of file