From 4e24ec197f2628380bef7c04eaaf1839475fbbb4 Mon Sep 17 00:00:00 2001 From: heck Date: Sat, 14 Sep 2024 16:03:38 +0200 Subject: [PATCH] add instr_zosc --- src/instr_zosc.cc | 64 +++++++++++++++++++++++++++++++++++++++++++++ src/instr_zosc.hh | 32 +++++++++++++++++++++++ src/main_perkons.cc | 7 ++--- 3 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 src/instr_zosc.cc create mode 100644 src/instr_zosc.hh diff --git a/src/instr_zosc.cc b/src/instr_zosc.cc new file mode 100644 index 0000000..4704195 --- /dev/null +++ b/src/instr_zosc.cc @@ -0,0 +1,64 @@ +#include "instr_zosc.hh" +#include "daisysp.h" +#include "utils.hh" + +namespace Heck { + namespace Instrument { + + ZOsc::ZOsc() + { + init(); + } + + void ZOsc::init() + { + zosc.Init(samplerate); + zosc.SetFreq(80.f); + zosc.SetShape(1.f); + } + + void ZOsc::trigger() + { + + } + + void ZOsc::ctl(unsigned int ctl_nr, float val) + { + switch (ctl_nr) { + case 0: { + zosc.SetFreq(scalen_min_max(val, 40, 180)); + } break; + case 1: { +// zosc.SetDecay(scalen_min_max(val,0,1)); + } break; + case 2: { + zosc.SetFormantFreq(scalen_min_max(val,200,800)); + } break; + case 3: { + zosc.SetShape(scalen_min_max(val,0,1)); + } break; + } + } + + void ZOsc::switch_mode1(unsigned int pos) + { + mode1 = pos; + zosc.SetMode(((float)pos)/3.); + hw.PrintLine(""); + } + + void ZOsc::switch_mode2(unsigned int pos) + { + mode2 = pos; + hw.PrintLine("ZOSC MODE2: %i", mode2); + } + + float ZOsc::nextsample() + { + float out{}; + out = zosc.Process(); + return out; + } + + } // namespace Instrument +} // namespace Heck \ No newline at end of file diff --git a/src/instr_zosc.hh b/src/instr_zosc.hh new file mode 100644 index 0000000..a54ad97 --- /dev/null +++ b/src/instr_zosc.hh @@ -0,0 +1,32 @@ +#ifndef HECK_DAISY_INSTR_ZOSC_HH +#define HECK_DAISY_INSTR_ZOSC_HH + +#include "instr_abstract.hh" +#include "daisy_seed.h" +#include "daisysp.h" + +namespace ld = daisy; +namespace dsp = daisysp; + +namespace Heck { + namespace Instrument { + + class ZOsc : public AbstractInstrument { + public: + ZOsc(); + void init(); + void trigger() override; + void ctl(unsigned int ctl_nr, float val) override; + void switch_mode1(unsigned int pos) override; + void switch_mode2(unsigned int pos) override; + float nextsample() override; + + private: + dsp::ZOscillator zosc{}; + float mode1{}; + float mode2{}; + }; + + } // namespace Instrument +} // namespace Heck +#endif \ No newline at end of file diff --git a/src/main_perkons.cc b/src/main_perkons.cc index 5f85163..8fbc5ed 100644 --- a/src/main_perkons.cc +++ b/src/main_perkons.cc @@ -13,6 +13,7 @@ #include "instr_fm.hh" #include "instr_grainlet.hh" #include "instr_hihat.hh" +#include "instr_zosc.hh" namespace ld = daisy; namespace dsp = daisysp; @@ -28,9 +29,9 @@ namespace Heck { static ld::MidiUartHandler midi{}; static ld::FIFO event_log{}; - Instrument::Kick instrument0{}; - Instrument::Grainlet instrument1{}; - Instrument::FM instrument2{}; + Instrument::ZOsc instrument0{}; + Instrument::FM instrument1{}; + Instrument::Grainlet instrument2{}; Instrument::HiHat instrument3{}; std::array tracks;