diff --git a/plugin/generator.cpp b/plugin/generator.cpp index 2d9a03a..4e9d156 100644 --- a/plugin/generator.cpp +++ b/plugin/generator.cpp @@ -24,7 +24,13 @@ #include "DistrhoPluginInfo.h" -Generator::Generator() { +Generator::Generator(uint32_t bufferSize) { + output = new float[bufferSize]; + +} + +Generator::~Generator() { + delete output; } void Generator::setupGenerator(double sampleRate) { @@ -37,7 +43,7 @@ void Generator::setupGenerator(double sampleRate) { } } -void Generator::runBlock(float *output, uint8_t *noteTable, uint32_t frames) { +void Generator::runBlock(uint8_t *noteTable, uint32_t frames) { Voice *v; uint32_t i; uint8_t k, p, key, n1, n2, d; diff --git a/plugin/generator.hpp b/plugin/generator.hpp index 0b36a75..1aa3632 100644 --- a/plugin/generator.hpp +++ b/plugin/generator.hpp @@ -45,10 +45,12 @@ class Voice { class Generator { public: - Generator(); + Generator(uint32_t bufferSize); + ~Generator(); void setupGenerator(double sampleRate); - void runBlock(float *output, uint8_t *noteTable, uint32_t frames); + void runBlock(uint8_t *noteTable, uint32_t frames); Voice voices[NUM_VOICES]; + float *output; private: uint32_t phase[12]; diff --git a/plugin/sonnenlicht.cpp b/plugin/sonnenlicht.cpp index 245ac02..a06158b 100644 --- a/plugin/sonnenlicht.cpp +++ b/plugin/sonnenlicht.cpp @@ -24,12 +24,15 @@ START_NAMESPACE_DISTRHO Sonnenlicht::Sonnenlicht() : Plugin(kParameterCount, 0, 0), fSampleRate(getSampleRate()) { printf("initialiser called\n"); - genny.setupGenerator(fSampleRate); - assigner = new Assigner(genny.voices); + genny = new Generator(getBufferSize()); + genny->setupGenerator(fSampleRate); + + assigner = new Assigner(genny->voices); } Sonnenlicht::~Sonnenlicht() { delete assigner; + delete genny; } void Sonnenlicht::setParameterValue(uint32_t index, float value) { @@ -51,7 +54,8 @@ void Sonnenlicht::deactivate() { } void Sonnenlicht::initParameter(uint32_t index, Parameter& parameter) { - (void) index; (void) ¶meter; // pretend these aren't here + (void)index; + (void)¶meter; // pretend these aren't here return; } @@ -61,7 +65,9 @@ void Sonnenlicht::run(const float**, float** outputs, uint32_t frames, assigner->handleMidi((MidiEvent*)&ev[i]); } - genny.runBlock(outputs[0], assigner->noteTbl, frames); + genny->runBlock(assigner->noteTbl, frames); + memcpy(outputs[0], genny->output, frames * sizeof(float)); + memcpy(outputs[1], genny->output, frames * sizeof(float)); } Plugin* createPlugin() { return new Sonnenlicht(); } diff --git a/plugin/sonnenlicht.hpp b/plugin/sonnenlicht.hpp index 0ea5176..5592883 100644 --- a/plugin/sonnenlicht.hpp +++ b/plugin/sonnenlicht.hpp @@ -58,9 +58,9 @@ class Sonnenlicht : public Plugin { const MidiEvent *midiEvents, uint32_t midiEventCount) override; private: - Assigner *assigner; double fSampleRate; - Generator genny; + Assigner *assigner; + Generator *genny; DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Sonnenlicht); };