Refactored code

This commit is contained in:
Christian Colglazier 2020-09-22 18:25:18 -04:00
parent 08559603b6
commit 94c5b276bb
5 changed files with 67 additions and 28 deletions

View File

@ -5,7 +5,35 @@ Droplet::Droplet(DaisyPatch* m_patch, DropletState m_state) {
UpdateState(m_state); UpdateState(m_state);
} }
void Droplet::DrawName(DaisyPatch* patch, std::string name) { DaisyPatch* Droplet::Patch() {
return patch;
}
DropletState Droplet::GetState() {
return state;
}
int Droplet::GetTitleHeight() {
return kTitleHeight;
}
int Droplet::GetScreenMin() {
return screen_min;
}
int Droplet::GetScreenMax() {
return screen_max;
}
size_t Droplet::GetChannelMin() {
return chn_min;
}
size_t Droplet::GetChannelMax() {
return chn_max;
}
void Droplet::DrawName(std::string name) {
WriteCenteredString(*patch, (screen_min + screen_max) / 2, 0, WriteCenteredString(*patch, (screen_min + screen_max) / 2, 0,
Font_6x8, name); Font_6x8, name);
} }
@ -37,3 +65,7 @@ void Droplet::AnimationInc() {
void Droplet::SetAnimationRate(int rate) { void Droplet::SetAnimationRate(int rate) {
animation_rate = rate; animation_rate = rate;
} }
int Droplet::GetAnimationCount() {
return animation_count;
}

View File

@ -15,27 +15,34 @@ enum class DropletState {kFull, kLeft, kRight};
class Droplet { class Droplet {
private: private:
unsigned int count = 0;
unsigned int animation_rate = 1;
public:
DaisyPatch* patch; DaisyPatch* patch;
DropletState state; DropletState state;
const int kTitleHeight = 7;
unsigned int count = 0;
unsigned int animation_rate = 1;
unsigned int animation_count = 0;
int screen_min;
int screen_max;
size_t chn_min = 0;
size_t chn_max = 4;
public:
Droplet(DaisyPatch*, DropletState); Droplet(DaisyPatch*, DropletState);
virtual ~Droplet() {}; virtual ~Droplet() {};
virtual void Control()=0; virtual void Control()=0;
virtual void Process(float**, float**, size_t)=0; virtual void Process(float**, float**, size_t)=0;
virtual void Draw()=0; virtual void Draw()=0;
const int kTitleHeight = 7; DaisyPatch* Patch();
int screen_min; DropletState GetState();
int screen_max; int GetTitleHeight();
size_t chn_min = 0; int GetScreenMin();
size_t chn_max = 4; int GetScreenMax();
void DrawName(daisy::DaisyPatch*, size_t GetChannelMin();
std::string); size_t GetChannelMax();
void UpdateState(DropletState); void DrawName(std::string);
unsigned int animation_count = 0; void UpdateState(DropletState);
void AnimationInc(); void AnimationInc();
void SetAnimationRate(int); void SetAnimationRate(int);
int GetAnimationCount();
}; };
#endif // CASCADE_DROPLETS_DROPLET_H_ #endif // CASCADE_DROPLETS_DROPLET_H_

View File

@ -12,17 +12,17 @@ void NoiseDroplet::Control() {}
void NoiseDroplet::Process(float** in, float** out, size_t size) { void NoiseDroplet::Process(float** in, float** out, size_t size) {
for (size_t i = 0; i < size; i += 2) { for (size_t i = 0; i < size; i += 2) {
float sig = noise.Process(); float sig = noise.Process();
for (size_t chn = chn_min; chn < chn_max; chn++) { for (size_t chn = GetChannelMin(); chn < GetChannelMax(); chn++) {
out[chn][i] = sig; out[chn][i] = sig;
} }
} }
} }
void NoiseDroplet::Draw() { void NoiseDroplet::Draw() {
for (int h = 0; h < kTitleHeight; h++) { for (int h = 0; h < GetTitleHeight(); h++) {
for (int w = screen_min; w < screen_max; w++) { for (int w = GetScreenMin(); w < GetScreenMax(); w++) {
patch->display.DrawPixel(w, h, rand() % 15 == 0); Patch()->display.DrawPixel(w, h, rand() % 15 == 0);
} }
} }
DrawName(patch, "Noise"); DrawName("Noise");
} }

View File

@ -8,13 +8,13 @@ VCODroplet::VCODroplet(DaisyPatch* m_patch,
int num_waves = Oscillator::WAVE_LAST; int num_waves = Oscillator::WAVE_LAST;
SetAnimationRate(10); SetAnimationRate(10);
osc.Init(sample_rate); osc.Init(sample_rate);
freqctrl.Init(patch->controls[patch->CTRL_1], 10.0, freqctrl.Init(Patch()->controls[Patch()->CTRL_1], 10.0,
110.0f, Parameter::LINEAR); 110.0f, Parameter::LINEAR);
finectrl.Init(patch->controls[patch->CTRL_2], 0.f, finectrl.Init(Patch()->controls[Patch()->CTRL_2], 0.f,
7.f, Parameter::LINEAR); 7.f, Parameter::LINEAR);
wavectrl.Init(patch->controls[patch->CTRL_3], 0.0, wavectrl.Init(Patch()->controls[Patch()->CTRL_3], 0.0,
num_waves, Parameter::LINEAR); num_waves, Parameter::LINEAR);
ampctrl.Init(patch->controls[patch->CTRL_4], 0.0, ampctrl.Init(Patch()->controls[Patch()->CTRL_4], 0.0,
0.5f, Parameter::LINEAR); 0.5f, Parameter::LINEAR);
} }
@ -28,7 +28,7 @@ void VCODroplet::Process(float** in, float** out, size_t size) {
float sig, freq, amp; float sig, freq, amp;
size_t wave; size_t wave;
patch->UpdateAnalogControls(); Patch()->UpdateAnalogControls();
for (size_t i = 0; i < size; i += 2) { for (size_t i = 0; i < size; i += 2) {
// Read Knobs // Read Knobs
@ -51,14 +51,14 @@ void VCODroplet::Process(float** in, float** out, size_t size) {
void VCODroplet::Draw() { void VCODroplet::Draw() {
wave->SetBlank(); wave->SetBlank();
for (int i = 0; i < sine_width; i++) { for (int i = 0; i < sine_width; i++) {
int pixel = (int) round(std::sin(2*pi*((double)(i + animation_count%sine_width)/sine_width)) * (kTitleHeight/2) + kTitleHeight/2); int pixel = (int) round(std::sin(2*pi*((double)(i + GetAnimationCount()%sine_width)/sine_width)) * (GetTitleHeight()/2) + GetTitleHeight()/2);
wave->SetPixel(i, pixel, true); wave->SetPixel(i, pixel, true);
} }
WriteString(*patch, 0, 54, Font_6x8, WriteString(*Patch(), 0, 54, Font_6x8,
WaveToString(wavectrl.Process())); WaveToString(wavectrl.Process()));
wave->DrawTile(*patch, screen_min, 0, screen_max, kTitleHeight); wave->DrawTile(*Patch(), GetScreenMin(), 0, GetScreenMax(), GetTitleHeight());
DrawName(patch, "VCO"); DrawName("VCO");
AnimationInc(); AnimationInc();
} }

View File

@ -22,7 +22,7 @@ private:
std::string WaveToString(uint8_t); std::string WaveToString(uint8_t);
const double pi = std::acos(-1); const double pi = std::acos(-1);
int sine_width = 20; int sine_width = 20;
Sprite* wave = new Sprite(sine_width, kTitleHeight); Sprite* wave = new Sprite(sine_width, GetTitleHeight());
public: public:
VCODroplet(DaisyPatch*, DropletState, float); VCODroplet(DaisyPatch*, DropletState, float);
~VCODroplet(); ~VCODroplet();