diff options
author | Tim E. Real <termtech@rogers.com> | 2011-08-29 22:44:24 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2011-08-29 22:44:24 +0000 |
commit | d505c378bdf55445babb73e0ba4085702be35870 (patch) | |
tree | 40ccb82e5b27f118904a5298faedd10fe3b96d36 /muse2/muse/plugin.cpp | |
parent | 21e75f0c2d14010d060693c77fd3e22e1fccd65d (diff) |
Fixed audio automation graph editing. And now 'snaps' to discrete integer or bool types.
All control movements should update display now. Also slightly changed behaviour of Ctrl class.
TODO: Fix some painting corruption, improve discrete display, add transparency etc. etc.
Applied compilation patch to rhythmbase.ui by Jean-Damien Durand.
Diffstat (limited to 'muse2/muse/plugin.cpp')
-rw-r--r-- | muse2/muse/plugin.cpp | 92 |
1 files changed, 69 insertions, 23 deletions
diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp index 215a7844..e6027c6f 100644 --- a/muse2/muse/plugin.cpp +++ b/muse2/muse/plugin.cpp @@ -445,7 +445,44 @@ float midi2LadspaValue(const LADSPA_Descriptor* plugin, unsigned long port, int return ret; } +//--------------------------------------------------------- +// ladspaCtrlValueType +//--------------------------------------------------------- +CtrlValueType ladspaCtrlValueType(const LADSPA_Descriptor* plugin, int port) +{ + LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + + if(desc & LADSPA_HINT_INTEGER) + return VAL_INT; + else if(desc & LADSPA_HINT_LOGARITHMIC) + return VAL_LOG; + else if(desc & LADSPA_HINT_TOGGLED) + return VAL_BOOL; + else + return VAL_LINEAR; +} + +//--------------------------------------------------------- +// ladspaCtrlMode +//--------------------------------------------------------- + +CtrlList::Mode ladspaCtrlMode(const LADSPA_Descriptor* plugin, int port) +{ + LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; + LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; + + if(desc & LADSPA_HINT_INTEGER) + return CtrlList::DISCRETE; + else if(desc & LADSPA_HINT_LOGARITHMIC) + return CtrlList::INTERPOLATE; + else if(desc & LADSPA_HINT_TOGGLED) + return CtrlList::DISCRETE; + else + return CtrlList::INTERPOLATE; +} + // Works but not needed. /* //--------------------------------------------------------- @@ -1003,6 +1040,24 @@ float Plugin::defaultValue(unsigned long port) const } //--------------------------------------------------------- +// ctrlValueType +//--------------------------------------------------------- + +CtrlValueType Plugin::ctrlValueType(unsigned long i) const + { + return ladspaCtrlValueType(plugin, i); + } + +//--------------------------------------------------------- +// ctrlMode +//--------------------------------------------------------- + +CtrlList::Mode Plugin::ctrlMode(unsigned long i) const + { + return ladspaCtrlMode(plugin, i); + } + +//--------------------------------------------------------- // loadPluginLib //--------------------------------------------------------- @@ -1699,21 +1754,12 @@ void PluginI::updateControllers() for(unsigned long i = 0; i < controlPorts; ++i) //audio->msgSetPluginCtrlVal(this, genACnum(_id, i), controls[i].val); // p3.3.43 - //audio->msgSetPluginCtrlVal(_track, genACnum(_id, i), controls[i].val); + audio->msgSetPluginCtrlVal(_track, genACnum(_id, i), controls[i].val); // p4.0.21 audio->msgXXX waits. Do we really need to? - _track->setPluginCtrlVal(genACnum(_id, i), controls[i].val); + //_track->setPluginCtrlVal(genACnum(_id, i), controls[i].val); // TODO A faster bulk message } //--------------------------------------------------------- -// valueType -//--------------------------------------------------------- - -CtrlValueType PluginI::valueType() const - { - return VAL_LINEAR; - } - -//--------------------------------------------------------- // setChannel //--------------------------------------------------------- @@ -3718,9 +3764,9 @@ void PluginGui::ctrlPressed(int param) if(track) { // p3.3.43 - //audio->msgSetPluginCtrlVal(track, id, val); + audio->msgSetPluginCtrlVal(track, id, val); // p4.0.21 audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); + //track->setPluginCtrlVal(id, val); track->startAutoRecord(id, val); } @@ -3737,9 +3783,9 @@ void PluginGui::ctrlPressed(int param) if(track) { // p3.3.43 - //audio->msgSetPluginCtrlVal(track, id, val); + audio->msgSetPluginCtrlVal(track, id, val); // p4.0.21 audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); + //track->setPluginCtrlVal(id, val); track->startAutoRecord(id, val); } @@ -3831,9 +3877,9 @@ void PluginGui::sliderChanged(double val, int param) if(track) { // p3.3.43 - //audio->msgSetPluginCtrlVal(track, id, val); + audio->msgSetPluginCtrlVal(track, id, val); // p4.0.21 audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); + //track->setPluginCtrlVal(id, val); track->recordAutomation(id, val); } @@ -3875,9 +3921,9 @@ void PluginGui::labelChanged(double val, int param) if(track) { // p3.3.43 - //audio->msgSetPluginCtrlVal(track, id, val); + audio->msgSetPluginCtrlVal(track, id, val); // p4.0.21 audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); + //track->setPluginCtrlVal(id, val); track->startAutoRecord(id, val); } @@ -4277,9 +4323,9 @@ void PluginGui::guiParamChanged(int idx) //if(track) //{ // p3.3.43 - //audio->msgSetPluginCtrlVal(track, id, val); + audio->msgSetPluginCtrlVal(track, id, val); // p4.0.21 audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); + //track->setPluginCtrlVal(id, val); switch(type) { @@ -4413,9 +4459,9 @@ void PluginGui::guiSliderPressed(int idx) //audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); // p3.3.43 - //audio->msgSetPluginCtrlVal(track, id, val); + audio->msgSetPluginCtrlVal(track, id, val); // p4.0.21 audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); + //track->setPluginCtrlVal(id, val); track->startAutoRecord(id, val); |