diff --git a/mec-kontrol/pd/kontrolrack/KontrolRack.cpp b/mec-kontrol/pd/kontrolrack/KontrolRack.cpp index efcdcec..d56bf7f 100644 --- a/mec-kontrol/pd/kontrolrack/KontrolRack.cpp +++ b/mec-kontrol/pd/kontrolrack/KontrolRack.cpp @@ -375,6 +375,10 @@ EXTERN void KontrolRack_setup(void) { (t_method) KontrolRack_setmoduleorder, gensym("setmoduleorder"), A_GIMME, A_NULL); + class_addmethod(KontrolRack_class, + (t_method) KontrolRack_instantParam, gensym("instantParamsBool"), + A_FLOAT, A_NULL); + class_addmethod(KontrolRack_class, (t_method) KontrolRack_test, gensym("test"), A_DEFFLOAT, A_NULL); @@ -1030,6 +1034,9 @@ void KontrolRack_selectmodule(t_KontrolRack* x, t_floatarg module) { if (x->device_) x->device_->selectModule((unsigned) module); } +void KontrolRack_instantParam(t_KontrolRack* x, t_floatarg setting) { + x->device_->instantParam(setting); +} //----------------------- void PdCallback::rack(Kontrol::ChangeSource src, const Kontrol::Rack & rack) { diff --git a/mec-kontrol/pd/kontrolrack/KontrolRack.h b/mec-kontrol/pd/kontrolrack/KontrolRack.h index 97b2396..738e38c 100644 --- a/mec-kontrol/pd/kontrolrack/KontrolRack.h +++ b/mec-kontrol/pd/kontrolrack/KontrolRack.h @@ -84,6 +84,7 @@ void KontrolRack_selectmodule(t_KontrolRack* x, t_floatarg value); void KontrolRack_loadresources(t_KontrolRack *x); void KontrolRack_setmoduleorder(t_KontrolRack *x,t_symbol* s, int argc, t_atom *argv); +void KontrolRack_instantParam(t_KontrolRack *x, t_floatarg setting); } diff --git a/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.cpp b/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.cpp index c58f695..16281fb 100644 --- a/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.cpp +++ b/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.cpp @@ -221,6 +221,10 @@ void KontrolDevice::midiLearn(Kontrol::ChangeSource src, bool b) { midiLearnActive_ = b; } +void KontrolDevice::instantParam(bool b) { + instantParamSetting_ = b; +} + void KontrolDevice::modulationLearn(Kontrol::ChangeSource src, bool b) { modParamId_ = ""; modModuleId_ = ""; diff --git a/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.h b/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.h index d3db09b..04410db 100644 --- a/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.h +++ b/mec-kontrol/pd/kontrolrack/devices/KontrolDevice.h @@ -66,6 +66,7 @@ class KontrolDevice : public Kontrol::KontrolCallback { void midiLearn(bool b); void modulationLearn(bool b); + void instantParam(bool b); virtual void midiCC(unsigned num, unsigned value); virtual void modulate(const std::string& src, unsigned bus, float value); @@ -81,6 +82,8 @@ class KontrolDevice : public Kontrol::KontrolCallback { bool midiLearn() { return midiLearnActive_; } bool modulationLearn() { return modulationLearnActive_; } + bool instantParamSetting() { return instantParamSetting_; } + Kontrol::EntityId currentRack() { return currentRackId_; } @@ -105,6 +108,7 @@ class KontrolDevice : public Kontrol::KontrolCallback { bool midiLearnActive_; bool modulationLearnActive_; bool enableMenu_; + bool instantParamSetting_ = false; std::vector moduleOrder_; Kontrol::EntityId modParamId_; diff --git a/mec-kontrol/pd/kontrolrack/devices/Organelle.cpp b/mec-kontrol/pd/kontrolrack/devices/Organelle.cpp index de5137b..d9cf7a9 100644 --- a/mec-kontrol/pd/kontrolrack/devices/Organelle.cpp +++ b/mec-kontrol/pd/kontrolrack/devices/Organelle.cpp @@ -313,13 +313,16 @@ void OParamMode::changePot(unsigned pot, float rawvalue) { if (rawvalue != std::numeric_limits::max()) { float value = rawvalue / MAX_POT_VALUE; calc = param->calcFloat(value); + if (rawvalue != pots_->rawValue[pot] && parent_.instantParamSetting()) { + pots_->locked_[pot] = Pots::K_UNLOCKED; + } //std::cerr << "changePot " << pot << " " << value << " cv " << calc.floatValue() << " pv " << param->current().floatValue() << std::endl; } pots_->rawValue[pot] = rawvalue; - if (pots_->locked_[pot] != Pots::K_UNLOCKED) { + if (pots_->locked_[pot] != Pots::K_UNLOCKED && parent_.instantParamSetting() == false) { //if pot is locked, determined if we can unlock it if (calc == param->current()) { pots_->locked_[pot] = Pots::K_UNLOCKED;