From 1ce68206330815c5c67ba3f904f9d5dfd8b286a6 Mon Sep 17 00:00:00 2001 From: Christian Colglazier Date: Wed, 16 Sep 2020 18:27:22 -0400 Subject: [PATCH] Droplet switching --- src/droplets/vco_droplet.cpp | 1 + src/main.cpp | 34 +++++++++++++++++++--------------- src/main.h | 12 ++++++++++++ src/menu.cpp | 27 ++++++++++++++------------- src/menu.h | 3 +++ 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/src/droplets/vco_droplet.cpp b/src/droplets/vco_droplet.cpp index 0018f49..0d4de3c 100644 --- a/src/droplets/vco_droplet.cpp +++ b/src/droplets/vco_droplet.cpp @@ -4,6 +4,7 @@ VCODroplet::VCODroplet(DaisyPatch* m_patch, float sample_rate, DropletState m_state) { UpdateState(m_state); + patch = m_patch; int num_waves = Oscillator::WAVE_LAST - 1; osc.Init(sample_rate); freqctrl.Init(patch->controls[patch->CTRL_1], 10.0, diff --git a/src/main.cpp b/src/main.cpp index 3e17ee2..acba650 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,27 +1,16 @@ -#include "daisysp.h" -#include "daisy_patch.h" - -#include - #include "main.h" -#include "util.h" -#include "menu.h" -#include "droplets/droplet.h" -#include "droplets/noise_droplet.h" -#include "droplets/vco_droplet.h" using namespace daisy; DaisyPatch patch; Menu menu(&patch); Droplet* droplet; +float samplerate; int main(void) { patch.Init(); - float samplerate = patch.AudioSampleRate(); - droplet = new VCODroplet(&patch, - samplerate, - DropletState::kFull); + samplerate = patch.AudioSampleRate(); + droplet = GetDroplet(); patch.StartAdc(); patch.StartAudio(AudioThrough); @@ -39,6 +28,8 @@ void ProcessControls() { menu.UpdateMenuPosition(); if (patch.encoder.RisingEdge()) { menu.SetInMenu(false); + delete droplet; + droplet = GetDroplet(); } } else { if (patch.encoder.Pressed()) { @@ -57,7 +48,6 @@ void ProcessOled() { if (menu.InMenu()) { menu.ProcessMenuOled(); } else { - WriteString(patch, 0, 0, Font_6x8, menu.SelectedName()); droplet->Draw(); } patch.display.Update(); @@ -70,3 +60,17 @@ static void AudioThrough(float **in, droplet->Process(in, out, size); } +Droplet* GetDroplet() { + switch(menu.GetState()) { + case MenuState::kVCO: + return new VCODroplet(&patch, + samplerate, + DropletState::kFull); + break; + case MenuState::kNoise: + default: + return new NoiseDroplet(&patch, + samplerate, + DropletState::kFull); + } +} diff --git a/src/main.h b/src/main.h index 7d00216..7d44d6d 100644 --- a/src/main.h +++ b/src/main.h @@ -1,4 +1,16 @@ +#include "daisysp.h" +#include "daisy_patch.h" + +#include + +#include "util.h" +#include "menu.h" +#include "droplets/droplet.h" +#include "droplets/noise_droplet.h" +#include "droplets/vco_droplet.h" + void ProcessControls(); void ProcessOled(); void ProcessOutputs(); static void AudioThrough(float **, float **, size_t); +Droplet* GetDroplet(); diff --git a/src/menu.cpp b/src/menu.cpp index 3d2bd83..a53536c 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -4,15 +4,7 @@ Menu::Menu(DaisyPatch* m_patch) { patch = m_patch; } const std::string MENU_ITEMS[] = {"VCO", - "VCA", - "Envelope", - "LFO", - "Logic", - "Noise", - "Delay", - "Reverb", - "Turing", - "Quantizer"}; + "Noise"}; const int MENU_SIZE = sizeof(MENU_ITEMS)/sizeof(*MENU_ITEMS); const int MAX_CHAR_LENGTH = 15; const int MENU_X[] = {0, 5, 10, 5, 0}; @@ -44,13 +36,18 @@ std::string Menu::FilterMenuText(int position) { } } -void Menu::CreateMenuItem(std::string text, int position, bool highlighted) { +void Menu::CreateMenuItem(std::string text, + int position, + bool highlighted) { text.insert(text.end(), MAX_CHAR_LENGTH-text.size(), ' '); if (highlighted) { - DrawSolidRect(*patch, 0, MENU_Y[2], SSD1309_WIDTH, MENU_Y[2]+17, true); - WriteString(*patch, MENU_X[position-1], MENU_Y[position-1], Font_11x18, text, !highlighted); + DrawSolidRect(*patch, 0, MENU_Y[2], + SSD1309_WIDTH, MENU_Y[2]+17, true); + WriteString(*patch, MENU_X[position-1], MENU_Y[position-1], + Font_11x18, text, !highlighted); } else { - WriteString(*patch, MENU_X[position-1], MENU_Y[position-1], Font_7x10, text, !highlighted); + WriteString(*patch, MENU_X[position-1], MENU_Y[position-1], + Font_7x10, text, !highlighted); } } @@ -70,3 +67,7 @@ void Menu::UpdateMenuPosition() { std::string Menu::SelectedName() { return MENU_ITEMS[selectedMenuItem]; } + +MenuState Menu::GetState() { + return static_cast(selectedMenuItem); +} diff --git a/src/menu.h b/src/menu.h index 8e3b94c..6386b9b 100644 --- a/src/menu.h +++ b/src/menu.h @@ -10,6 +10,8 @@ using namespace daisy; +enum class MenuState {kVCO, kNoise}; + class Menu { private: DaisyPatch* patch; @@ -23,6 +25,7 @@ class Menu { void ProcessMenuOled(); void UpdateMenuPosition(); std::string SelectedName(); + MenuState GetState(); }; #endif // CASCADE_MENU_H_