Browse Source

Update zynaddsubfx

tags/1.9.7
falkTX 10 years ago
parent
commit
dcdebf1375
3 changed files with 45 additions and 20 deletions
  1. +24
    -13
      source/native-plugins/zynaddsubfx/Effects/EffectMgr.cpp
  2. +2
    -2
      source/native-plugins/zynaddsubfx/Effects/EffectMgr.h
  3. +19
    -5
      source/native-plugins/zynaddsubfx/UI/SUBnoteUI.fl

+ 24
- 13
source/native-plugins/zynaddsubfx/Effects/EffectMgr.cpp View File

@@ -43,7 +43,7 @@ static const rtosc::Ports local_ports = {
rSelf(EffectMgr), rSelf(EffectMgr),
rPaste, rPaste,
rRecurp(filterpars, "Filter Parameter for Dynamic Filter"), rRecurp(filterpars, "Filter Parameter for Dynamic Filter"),
{"parameter#64::i", rProp(alias) rDoc("Parameter Accessor"), NULL,
{"parameter#128::i", rProp(alias) rDoc("Parameter Accessor"), NULL,
[](const char *msg, rtosc::RtData &d) [](const char *msg, rtosc::RtData &d)
{ {
EffectMgr *eff = (EffectMgr*)d.obj; EffectMgr *eff = (EffectMgr*)d.obj;
@@ -52,8 +52,10 @@ static const rtosc::Ports local_ports = {


if(!rtosc_narguments(msg)) if(!rtosc_narguments(msg))
d.reply(d.loc, "i", eff->geteffectparrt(atoi(mm))); d.reply(d.loc, "i", eff->geteffectparrt(atoi(mm)));
else
else {
eff->seteffectparrt(atoi(mm), rtosc_argument(msg, 0).i); eff->seteffectparrt(atoi(mm), rtosc_argument(msg, 0).i);
d.broadcast(d.loc, "i", eff->geteffectparrt(atoi(mm)));
}
}}, }},
{"preset::i", rProp(alias) rDoc("Effect Preset Selector"), NULL, {"preset::i", rProp(alias) rDoc("Effect Preset Selector"), NULL,
[](const char *msg, rtosc::RtData &d) [](const char *msg, rtosc::RtData &d)
@@ -61,8 +63,10 @@ static const rtosc::Ports local_ports = {
EffectMgr *eff = (EffectMgr*)d.obj; EffectMgr *eff = (EffectMgr*)d.obj;
if(!rtosc_narguments(msg)) if(!rtosc_narguments(msg))
d.reply(d.loc, "i", eff->getpreset()); d.reply(d.loc, "i", eff->getpreset());
else
else {
eff->changepresetrt(rtosc_argument(msg, 0).i); eff->changepresetrt(rtosc_argument(msg, 0).i);
d.broadcast(d.loc, "i", eff->getpreset());
}
}}, }},
{"eq-coeffs:", rProp(internal) rDoc("Get equalizer Coefficients"), NULL, {"eq-coeffs:", rProp(internal) rDoc("Get equalizer Coefficients"), NULL,
[](const char *, rtosc::RtData &d) [](const char *, rtosc::RtData &d)
@@ -81,9 +85,10 @@ static const rtosc::Ports local_ports = {
{"efftype::i", rDoc("Get Effect Type"), NULL, [](const char *m, rtosc::RtData &d) {"efftype::i", rDoc("Get Effect Type"), NULL, [](const char *m, rtosc::RtData &d)
{ {
EffectMgr *eff = (EffectMgr*)d.obj; EffectMgr *eff = (EffectMgr*)d.obj;
if(rtosc_narguments(m))
if(rtosc_narguments(m)) {
eff->changeeffectrt(rtosc_argument(m,0).i); eff->changeeffectrt(rtosc_argument(m,0).i);
else
d.broadcast(d.loc, "i", eff->nefx);
} else
d.reply(d.loc, "i", eff->nefx); d.reply(d.loc, "i", eff->nefx);
}}, }},
{"efftype:b", rProp(internal) rDoc("Pointer swap EffectMgr"), NULL, {"efftype:b", rProp(internal) rDoc("Pointer swap EffectMgr"), NULL,
@@ -141,7 +146,7 @@ void EffectMgr::defaults(void)
} }


//Change the effect //Change the effect
void EffectMgr::changeeffectrt(int _nefx)
void EffectMgr::changeeffectrt(int _nefx, bool avoidSmash)
{ {
cleanup(); cleanup();
if(nefx == _nefx && efx != NULL) if(nefx == _nefx && efx != NULL)
@@ -185,6 +190,10 @@ void EffectMgr::changeeffectrt(int _nefx)


if(efx) if(efx)
filterpars = efx->filterpars; filterpars = efx->filterpars;

if(!avoidSmash)
for(int i=0; i<128; ++i)
settings[i] = geteffectparrt(i);
} }


void EffectMgr::changeeffect(int _nefx) void EffectMgr::changeeffect(int _nefx)
@@ -203,8 +212,8 @@ int EffectMgr::geteffect(void)
// Initialize An Effect in RT context // Initialize An Effect in RT context
void EffectMgr::init(void) void EffectMgr::init(void)
{ {
changeeffectrt(nefx);
changepresetrt(preset);
changeeffectrt(nefx, true);
changepresetrt(preset, true);
for(int i=0; i<128; ++i) for(int i=0; i<128; ++i)
seteffectparrt(i, settings[i]); seteffectparrt(i, settings[i]);
} }
@@ -240,11 +249,14 @@ void EffectMgr::changepreset(unsigned char npreset)
} }


// Change the preset of the current effect // Change the preset of the current effect
void EffectMgr::changepresetrt(unsigned char npreset)
void EffectMgr::changepresetrt(unsigned char npreset, bool avoidSmash)
{ {
preset = npreset; preset = npreset;
if(efx) if(efx)
efx->setpreset(npreset); efx->setpreset(npreset);
if(!avoidSmash)
for(int i=0; i<128; ++i)
settings[i] = geteffectparrt(i);
} }


//Change a parameter of the current effect //Change a parameter of the current effect
@@ -368,11 +380,10 @@ void EffectMgr::setdryonly(bool value)


void EffectMgr::paste(EffectMgr &e) void EffectMgr::paste(EffectMgr &e)
{ {
changeeffectrt(e.nefx);
changepresetrt(e.preset);
for(int i=0;i<128;++i){
changeeffectrt(e.nefx, true);
changepresetrt(e.preset, true);
for(int i=0;i<128;++i)
seteffectparrt(e.settings[i], i); seteffectparrt(e.settings[i], i);
}
} }


void EffectMgr::add2XML(XMLwrapper *xml) void EffectMgr::add2XML(XMLwrapper *xml)


+ 2
- 2
source/native-plugins/zynaddsubfx/Effects/EffectMgr.h View File

@@ -62,11 +62,11 @@ class EffectMgr:public Presets
void kill(void) REALTIME; void kill(void) REALTIME;
void cleanup(void) REALTIME; void cleanup(void) REALTIME;


void changeeffectrt(int nefx_) REALTIME;
void changeeffectrt(int nefx_, bool avoidSmash=false) REALTIME;
void changeeffect(int nefx_) NONREALTIME; void changeeffect(int nefx_) NONREALTIME;
int geteffect(void); int geteffect(void);
void changepreset(unsigned char npreset) NONREALTIME; void changepreset(unsigned char npreset) NONREALTIME;
void changepresetrt(unsigned char npreset) REALTIME;
void changepresetrt(unsigned char npreset, bool avoidSmash=false) REALTIME;
unsigned char getpreset(void); unsigned char getpreset(void);
void seteffectpar(int npar, unsigned char value) NONREALTIME; void seteffectpar(int npar, unsigned char value) NONREALTIME;
void seteffectparrt(int npar, unsigned char value) REALTIME; void seteffectparrt(int npar, unsigned char value) REALTIME;


+ 19
- 5
source/native-plugins/zynaddsubfx/UI/SUBnoteUI.fl View File

@@ -52,6 +52,20 @@ class PPSlider {: {public Fl_Slider, public Fl_Osc_Widget}
} { } {
code {int X=x(),Y=y(),W=w(),H=h(); code {int X=x(),Y=y(),W=w(),H=h();


// catch any (un)learn event first
{
bool middle_mouse = (event == FL_PUSH && Fl::event_state(FL_BUTTON2) && !Fl::event_shift());
bool ctl_click = (event == FL_PUSH && Fl::event_state(FL_BUTTON1) && Fl::event_ctrl());
bool shift_middle = (event == FL_PUSH && Fl::event_state(FL_BUTTON2) && Fl::event_shift());
if(middle_mouse || ctl_click) {
osc->write("/learn", "s", (loc+ext).c_str());
return 1;
} else if(shift_middle) {
osc->write("/unlearn", "s", (loc+ext).c_str());
return 1;
}
}

if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event)); if ((!Fl::event_buttons())|| (event==0)||(Fl::event_shift()==0)) return(Fl_Slider::handle(event));


if (!Fl::event_inside(X,Y,W,H)) { if (!Fl::event_inside(X,Y,W,H)) {
@@ -100,7 +114,7 @@ class SUBnoteharmonic {: {public Fl_Osc_Group}
int x=0; int x=0;
if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value(); if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value();
else o->value(127-x); else o->value(127-x);
o->osc->writeValue(o->loc + "Phmag" + to_s(n), (char) x);
o->osc->writeValue(o->loc + o->ext, (char) x);
if (x==0) o->selection_color(0); if (x==0) o->selection_color(0);
else o->selection_color(222);} else o->selection_color(222);}
tooltip {harmonic's magnitude} xywh {0 15 10 135} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 127 tooltip {harmonic's magnitude} xywh {0 15 10 135} type {Vert Knob} box FLAT_BOX selection_color 222 maximum 127 step 1 value 127
@@ -137,16 +151,16 @@ if (Fl::event_button1() || Fl::event() == FL_MOUSEWHEEL) x=127-(int)o->value();
code {n=n_; code {n=n_;
make_window(); make_window();
harmonic->show(); harmonic->show();
osc->createLink(base+"Phmag"+to_s(n), mag);
mag->ext = "Phmag" + to_s(n);
mag->oscRegister(mag->ext.c_str());
osc->createLink(base+"Phrelbw"+to_s(n), bw); osc->createLink(base+"Phrelbw"+to_s(n), bw);
osc->requestValue(base+"Phmag"+to_s(n));
osc->requestValue(base+"Phrelbw"+to_s(n)); osc->requestValue(base+"Phrelbw"+to_s(n));


end();} {} end();} {}
} }
Function {refresh()} {} { Function {refresh()} {} {
code {osc->requestValue(base+"Phmag"+to_s(n));
code {// request values for the widgets
mag->oscWrite(mag->ext);
osc->requestValue(base+"Phrelbw"+to_s(n));} {} osc->requestValue(base+"Phrelbw"+to_s(n));} {}
} }
Function {~SUBnoteharmonic()} {} { Function {~SUBnoteharmonic()} {} {


Loading…
Cancel
Save