summaryrefslogtreecommitdiff
path: root/muse2/muse/plugin.cpp
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2011-08-29 22:44:24 +0000
committerTim E. Real <termtech@rogers.com>2011-08-29 22:44:24 +0000
commitd505c378bdf55445babb73e0ba4085702be35870 (patch)
tree40ccb82e5b27f118904a5298faedd10fe3b96d36 /muse2/muse/plugin.cpp
parent21e75f0c2d14010d060693c77fd3e22e1fccd65d (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.cpp92
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);