zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit abe28844f2063dcf0e85db910b0ccb57b03a445f
parent dfe6076bad9205a1ab18ede4260b37a59ab2d0b7
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Sun, 19 Oct 2014 14:24:59 -0400

Fix Some Effect Loading Stuff

Diffstat:
Msrc/Effects/EffectMgr.cpp | 46++++++++++++++++++++++++++++------------------
Msrc/UI/BankView.cpp | 4++++
Msrc/UI/Fl_Osc_Choice.H | 3++-
Msrc/UI/Fl_Osc_Choice.cpp | 7++++++-
4 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/src/Effects/EffectMgr.cpp b/src/Effects/EffectMgr.cpp @@ -40,7 +40,7 @@ rtosc::Ports EffectMgr::ports = { RECURP(EffectMgr, FilterParams, Filter, filterpars, "Filter Parameter for Dynamic Filter"), - {"parameter#64::c", rProp(alias) rDoc("Parameter Accessor"), NULL, + {"parameter#64::i", rProp(alias) rDoc("Parameter Accessor"), NULL, [](const char *msg, rtosc::RtData &d) { EffectMgr *eff = (EffectMgr*)d.obj; @@ -48,16 +48,16 @@ rtosc::Ports EffectMgr::ports = { while(!isdigit(*mm))++mm; if(!rtosc_narguments(msg)) - d.reply(d.loc, "c", eff->geteffectpar(atoi(mm))); - else + d.reply(d.loc, "i", eff->geteffectpar(atoi(mm))); + else eff->seteffectparrt(atoi(mm), rtosc_argument(msg, 0).i); }}, - {"preset::c", rProp(alias) rDoc("Effect Preset Selector"), NULL, + {"preset::i", rProp(alias) rDoc("Effect Preset Selector"), NULL, [](const char *msg, rtosc::RtData &d) { EffectMgr *eff = (EffectMgr*)d.obj; if(!rtosc_narguments(msg)) - d.reply(d.loc, "c", eff->getpreset()); + d.reply(d.loc, "i", eff->getpreset()); else eff->changepresetrt(rtosc_argument(msg, 0).i); }}, @@ -75,14 +75,18 @@ rtosc::Ports EffectMgr::ports = { eq->getFilter(a,b); d.reply(d.loc, "bb", sizeof(a), a, sizeof(b), b); }}, - {"efftype:", rProp(internal) rDoc("Get Effect Type"), NULL, [](const char *, rtosc::RtData &d) + {"efftype::i", rDoc("Get Effect Type"), NULL, [](const char *m, rtosc::RtData &d) { EffectMgr *eff = (EffectMgr*)d.obj; - d.reply(d.loc, "c", eff->nefx); + if(rtosc_narguments(m)) + eff->changeeffectrt(rtosc_argument(m,0).i); + else + d.reply(d.loc, "i", eff->nefx); }}, {"efftype:b", rProp(internal) rDoc("Pointer swap EffectMgr"), NULL, [](const char *msg, rtosc::RtData &d) { + printf("OBSOLETE METHOD CALLED\n"); EffectMgr *eff = (EffectMgr*)d.obj; EffectMgr *eff_ = *(EffectMgr**)rtosc_argument(msg,0).b.data; @@ -113,6 +117,7 @@ EffectMgr::EffectMgr(Allocator &alloc, const bool insertion_) setpresettype("Peffect"); memset(efxoutl, 0, synth->bufferbytes); memset(efxoutr, 0, synth->bufferbytes); + memset(settings, 0, sizeof(settings)); defaults(); } @@ -134,7 +139,7 @@ void EffectMgr::defaults(void) void EffectMgr::changeeffectrt(int _nefx) { cleanup(); - if(nefx == _nefx) + if(nefx == _nefx && efx != NULL) return; nefx = _nefx; memset(efxoutl, 0, synth->bufferbytes); @@ -179,9 +184,9 @@ void EffectMgr::changeeffectrt(int _nefx) void EffectMgr::changeeffect(int _nefx) { - effect_id = _nefx; - preset = 0; - memset(settings, 0, sizeof(settings)); + nefx = _nefx; + //preset = 0; + //memset(settings, 0, sizeof(settings)); } //Obtain the effect number @@ -193,8 +198,7 @@ int EffectMgr::geteffect(void) // Initialize An Effect in RT context void EffectMgr::init(void) { - //printf("Initializing Effect(%d)\n", effect_id); - changeeffectrt(effect_id); + changeeffectrt(nefx); changepresetrt(preset); for(int i=0; i<128; ++i) seteffectparrt(i, settings[i]); @@ -203,7 +207,7 @@ void EffectMgr::init(void) //Strip effect manager of it's realtime memory void EffectMgr::kill(void) { - //printf("Killing Effect(%d)\n", effect_id); + //printf("Killing Effect(%d)\n", nefx); memory.dealloc(efx); } @@ -233,6 +237,7 @@ void EffectMgr::changepreset(unsigned char npreset) // Change the preset of the current effect void EffectMgr::changepresetrt(unsigned char npreset) { + preset = npreset; if(efx) efx->setpreset(npreset); } @@ -240,6 +245,8 @@ void EffectMgr::changepresetrt(unsigned char npreset) //Change a parameter of the current effect void EffectMgr::seteffectparrt(int npar, unsigned char value) { + if(npar<128) + settings[npar] = value; if(!efx) return; efx->changepar(npar, value); @@ -254,6 +261,9 @@ void EffectMgr::seteffectpar(int npar, unsigned char value) //Get a parameter of the current effect unsigned char EffectMgr::geteffectpar(int npar) { + if(npar<128) + return settings[npar]; + if(!efx) return 0; return efx->getpar(npar); @@ -348,9 +358,9 @@ void EffectMgr::add2XML(XMLwrapper *xml) { xml->addpar("type", geteffect()); - if(!efx || !geteffect()) + if(!geteffect()) return; - xml->addpar("preset", efx->Ppreset); + xml->addpar("preset", preset); xml->beginbranch("EFFECT_PARAMETERS"); for(int n = 0; n < 128; ++n) { @@ -373,10 +383,10 @@ void EffectMgr::getfromXML(XMLwrapper *xml) { changeeffect(xml->getpar127("type", geteffect())); - if(!efx || !geteffect()) + if(!geteffect()) return; - efx->Ppreset = xml->getpar127("preset", efx->Ppreset); + preset = xml->getpar127("preset", preset); if(xml->enterbranch("EFFECT_PARAMETERS")) { for(int n = 0; n < 128; ++n) { diff --git a/src/UI/BankView.cpp b/src/UI/BankView.cpp @@ -313,6 +313,10 @@ void BankView::OSC_raw(const char *msg) void BankView::refresh(void) { + //Odd case during initialization + if(!osc) + return; + for(int i=0; i<160; ++i) osc->write("/refresh_bank", "i", i); } diff --git a/src/UI/Fl_Osc_Choice.H b/src/UI/Fl_Osc_Choice.H @@ -14,7 +14,8 @@ class Fl_Osc_Choice:public Fl_Choice, public Fl_Osc_Widget //void OSC_value(float); - void OSC_value(char); + void OSC_value(int); + void OSC_value(char); //Refetch parameter information void update(void); diff --git a/src/UI/Fl_Osc_Choice.cpp b/src/UI/Fl_Osc_Choice.cpp @@ -50,13 +50,18 @@ void Fl_Osc_Choice::callback(Fl_Callback *cb, void *p) cb_data.second = p; } -void Fl_Osc_Choice::OSC_value(char v) +void Fl_Osc_Choice::OSC_value(int v) { value(v-min); if(cb_data.first) cb_data.first(this, cb_data.second); } +void Fl_Osc_Choice::OSC_value(char v) +{ + OSC_value((int)v); +} + void Fl_Osc_Choice::cb(void) { assert(osc);