From 3198556e0021c5ef757b3956346c308a44364d0c Mon Sep 17 00:00:00 2001 From: Christian Colglazier Date: Sat, 12 Sep 2020 17:00:00 -0400 Subject: [PATCH] Created droplet system with noise droplet --- Makefile | 4 ++-- src/droplets/droplet.h | 14 ++++++++++++++ src/droplets/noise_droplet.cpp | 16 ++++++++++++++++ src/droplets/noise_droplet.h | 21 +++++++++++++++++++++ src/main.cpp | 13 +++++++++++++ src/main.h | 1 + src/menu.cpp | 4 ++-- 7 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 src/droplets/droplet.h create mode 100644 src/droplets/noise_droplet.cpp create mode 100644 src/droplets/noise_droplet.h diff --git a/Makefile b/Makefile index 16a016c..7fc64f5 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ -TARGET = main +TARGET = cascade -CPP_SOURCES = src/main.cpp src/util.cpp src/menu.cpp +CPP_SOURCES = src/main.cpp src/util.cpp src/menu.cpp src/droplets/noise_droplet.cpp LIBDAISY_DIR = ./lib/libDaisy DAISYSP_DIR = ./lib/daisySP diff --git a/src/droplets/droplet.h b/src/droplets/droplet.h new file mode 100644 index 0000000..f0b250a --- /dev/null +++ b/src/droplets/droplet.h @@ -0,0 +1,14 @@ +#pragma once + +#ifndef CASCADE_DROPLETS_DROPLET_H_ +#define CASCADE_DROPLETS_DROPLET_H_ + +class Droplet { + public: + virtual ~Droplet() {}; + virtual void Control(float, float, float, float)=0; + virtual void Process(float**, float**, size_t)=0; + virtual void Draw(int*, int, int)=0; +}; + +#endif // CASCADE_DROPLETS_DROPLET_H_ diff --git a/src/droplets/noise_droplet.cpp b/src/droplets/noise_droplet.cpp new file mode 100644 index 0000000..ea093fa --- /dev/null +++ b/src/droplets/noise_droplet.cpp @@ -0,0 +1,16 @@ +#include "noise_droplet.h" + +NoiseDroplet::NoiseDroplet(float sample_rate) { + noise.Init(); +} + +void NoiseDroplet::Control(float ctr_1, float ctr_2, float ctr_3, float ctr_4) {} +void NoiseDroplet::Process(float** in, float** out, size_t size) { + for (size_t i = 0; i < size; i += 2) { + float sig = noise.Process(); + for (size_t chn = 0; chn < 4; chn++) { + out[chn][i] = sig; + } + } +} +void NoiseDroplet::Draw(int* d, int width, int height) {} diff --git a/src/droplets/noise_droplet.h b/src/droplets/noise_droplet.h new file mode 100644 index 0000000..76cbbf8 --- /dev/null +++ b/src/droplets/noise_droplet.h @@ -0,0 +1,21 @@ +#pragma once + +#ifndef CASCADE_DROPLETS_NOISE_DROPLET_H_ +#define CASCADE_DROPLETS_NOISE_DROPLET_H_ + +#include "daisysp.h" +#include "daisy_patch.h" + +#include "droplet.h" + +class NoiseDroplet: public Droplet { + private: + daisysp::WhiteNoise noise; + public: + NoiseDroplet(float); + void Control(float, float, float, float); + void Process(float**, float**, size_t); + void Draw(int*, int, int); +}; + +#endif // CASCADE_DROPLETS_NOISE_DROPLET_H_ diff --git a/src/main.cpp b/src/main.cpp index 3406018..18524ec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,16 +6,23 @@ #include "main.h" #include "util.h" #include "menu.h" +#include "droplets/droplet.h" +#include "droplets/noise_droplet.h" using namespace daisy; using namespace daisysp; DaisyPatch patch; Menu menu(&patch); +Droplet* droplet; int main(void) { patch.Init(); + float samplerate = patch.AudioSampleRate(); + droplet = new NoiseDroplet(samplerate); patch.StartAdc(); + patch.StartAudio(AudioThrough); + while(true) { ProcessControls(); ProcessOled(); @@ -51,3 +58,9 @@ void ProcessOled() { } patch.display.Update(); } + +static void AudioThrough(float **in, float **out, size_t size) { + patch.UpdateAnalogControls(); + droplet->Process(in, out, size); +} + diff --git a/src/main.h b/src/main.h index 4784e0a..7d00216 100644 --- a/src/main.h +++ b/src/main.h @@ -1,3 +1,4 @@ void ProcessControls(); void ProcessOled(); void ProcessOutputs(); +static void AudioThrough(float **, float **, size_t); diff --git a/src/menu.cpp b/src/menu.cpp index 2a4253f..3d2bd83 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -16,7 +16,7 @@ const std::string MENU_ITEMS[] = {"VCO", 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}; -const int MENU_Y[] = {0, 11, 22, 41, 52}; +const int MENU_Y[] = {0, 11, 22, 41, 52}; int selectedMenuItem = 0; bool inMenu = false; @@ -57,7 +57,7 @@ void Menu::CreateMenuItem(std::string text, int position, bool highlighted) { void Menu::ProcessMenuOled() { CreateMenuItem(FilterMenuText(selectedMenuItem-2), 1, false); CreateMenuItem(FilterMenuText(selectedMenuItem-1), 2, false); - CreateMenuItem(FilterMenuText(selectedMenuItem), 3, true); + CreateMenuItem(FilterMenuText(selectedMenuItem), 3, true); CreateMenuItem(FilterMenuText(selectedMenuItem+1), 4, false); CreateMenuItem(FilterMenuText(selectedMenuItem+2), 5, false); }