fix: remove adsr garbage code

This commit is contained in:
2023-09-08 17:17:23 +04:00
parent 1cf3cccb69
commit 576cf8e3b5
2 changed files with 18 additions and 26 deletions

View File

@@ -3,18 +3,14 @@
#include "Ramp.h" #include "Ramp.h"
#include <cstddef> #include <cstddef>
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 { class ADSR : public Effect {
enum ADSRState { sOff, sAttack, sDecay, sSustain, sRelease };
private: private:
ADSRParameters m_parameters; float m_attack_time;
float m_decay_time;
float m_sustain_level;
float m_release_time;
ADSRState m_state; ADSRState m_state;
Ramp* m_ramp; Ramp* m_ramp;
@@ -26,7 +22,6 @@ class ADSR : public Effect {
public: public:
ADSR(/* args */); ADSR(/* args */);
ADSR(ADSRParameters param);
~ADSR(); ~ADSR();
void Trigger() override; void Trigger() override;
void Release() override; void Release() override;

View File

@@ -3,15 +3,13 @@
#include "Settings.h" #include "Settings.h"
ADSR::ADSR(/* args */) { ADSR::ADSR(/* args */) {
m_parameters.attack_time = 1.f; m_attack_time = 1.f;
m_parameters.decay_time = 0.4f; m_decay_time = 0.4f;
m_parameters.sustain_level = 0.6f; m_sustain_level = 0.6f;
m_parameters.release_time = 0.8f; m_release_time = 0.8f;
m_ramp = new Ramp(0, SAMPLE_RATE); m_ramp = new Ramp(0, SAMPLE_RATE);
} }
ADSR::ADSR(ADSRParameters param) { m_parameters = param; }
ADSR::~ADSR() { delete m_ramp; } ADSR::~ADSR() { delete m_ramp; }
bool ADSR::is_attack_elapsed() { bool ADSR::is_attack_elapsed() {
@@ -31,8 +29,7 @@ void ADSR::recheck_state() {
case sAttack: case sAttack:
if (is_attack_elapsed()) { if (is_attack_elapsed()) {
m_state = sDecay; m_state = sDecay;
m_ramp->RampTo(m_parameters.sustain_level, m_ramp->RampTo(m_sustain_level, m_decay_time);
m_parameters.decay_time);
} }
break; break;
case sDecay: case sDecay:
@@ -58,7 +55,7 @@ void ADSR::process_sample(float* sample) {
} else if (m_state == sDecay) { } else if (m_state == sDecay) {
(*sample) = (*sample) * m_ramp->Process(); (*sample) = (*sample) * m_ramp->Process();
} else if (m_state == sSustain) { } else if (m_state == sSustain) {
(*sample) = (*sample) * m_parameters.sustain_level; (*sample) = (*sample) * m_sustain_level;
} else if (m_state == sRelease) { } else if (m_state == sRelease) {
(*sample) = (*sample) * m_ramp->Process(); (*sample) = (*sample) * m_ramp->Process();
} }
@@ -72,13 +69,13 @@ void ADSR::Trigger() {
m_state = sAttack; m_state = sAttack;
}; };
m_ramp->RampTo(1, m_parameters.attack_time); m_ramp->RampTo(1, m_attack_time);
} }
void ADSR::Release() { void ADSR::Release() {
write_log("Unset ADSR\n"); write_log("Unset ADSR\n");
m_state = sRelease; m_state = sRelease;
m_ramp->RampTo(0, m_parameters.release_time); m_ramp->RampTo(0, m_release_time);
} }
void ADSR::Process(std::vector<float>& samples) { void ADSR::Process(std::vector<float>& samples) {
@@ -90,8 +87,8 @@ void ADSR::Process(std::vector<float>& samples) {
void ADSR::SetParameters(float attack, float decay, float sustain, void ADSR::SetParameters(float attack, float decay, float sustain,
float release) { float release) {
m_parameters.attack_time = attack; m_attack_time = attack;
m_parameters.decay_time = decay; m_decay_time = decay;
m_parameters.sustain_level = sustain; m_sustain_level = sustain;
m_parameters.release_time = release; m_release_time = release;
} }