[SCM] calf/master: + Framework: add a set of methods everywhere to enable resetting everything to default values, including configure vars (doesn't work for DSSI and LV2 yet) + Framework: more API docs + Organ: reset percussion keytrack to straight line when activating XML presets w/o keytrack curve

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:37:28 UTC 2013


The following commit has been merged in the master branch:
commit da20dc56ae6aa5746d0454ea5b01be4b2db075c7
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Sat Aug 2 22:45:04 2008 +0000

    + Framework: add a set of methods everywhere to enable resetting everything to default values, including configure vars (doesn't work for DSSI and LV2 yet)
    + Framework: more API docs
    + Organ: reset percussion keytrack to straight line when activating XML presets w/o keytrack curve
    
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@252 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/src/calf/giface.h b/src/calf/giface.h
index 04f4546..a443fec 100644
--- a/src/calf/giface.h
+++ b/src/calf/giface.h
@@ -196,6 +196,8 @@ struct plugin_ctl_iface
     virtual char *configure(const char *key, const char *value) { return NULL; }
     /// Send all configure variables set within a plugin to given destination (which may be limited to only those that plugin understands)
     virtual void send_configures(send_configure_iface *)=0;
+    /// Restore all state (parameters and configure vars) to default values
+    virtual void clear_preset()=0;
     /// Do-nothing destructor to silence compiler warning
     virtual ~plugin_ctl_iface() {}
 };
@@ -308,9 +310,14 @@ struct ladspa_instance: public Module, public plugin_ctl_iface
     virtual void execute(int cmd_no) {
         Module::execute(cmd_no);
     }
-    void send_configures(send_configure_iface *sci) { 
+    virtual void send_configures(send_configure_iface *sci) { 
         Module::send_configures(sci);
     }
+    virtual void clear_preset() {
+        for (int i=0; i < Module::param_count; i++)
+            *Module::params[i] = Module::param_props[i].def_value;
+        Module::clear_configure_vars();
+    }
 };
 
 template<class Module>
diff --git a/src/calf/jackhost.h b/src/calf/jackhost.h
index 4cabc72..baca210 100644
--- a/src/calf/jackhost.h
+++ b/src/calf/jackhost.h
@@ -420,6 +420,11 @@ public:
     virtual void send_configures(send_configure_iface *sci) {
         module.send_configures(sci);
     }
+    virtual void clear_preset() {
+        for (int i=0; i < Module::param_count; i++)
+            *module.params[i] = Module::param_props[i].def_value;
+        module.clear_configure_vars();
+    }
 };
 
 extern jack_host_base *create_jack_host(const char *name);
diff --git a/src/calf/lv2wrap.h b/src/calf/lv2wrap.h
index b54dacc..b847e66 100644
--- a/src/calf/lv2wrap.h
+++ b/src/calf/lv2wrap.h
@@ -86,6 +86,11 @@ struct lv2_instance: public Module, public plugin_ctl_iface
     void send_configures(send_configure_iface *sci) { 
         Module::send_configures(sci);
     }
+    virtual void clear_preset() {
+        for (int i=0; i < Module::param_count; i++)
+            *Module::params[i] = Module::param_props[i].def_value;
+        Module::clear_configure_vars();
+    }
 };
 
 template<class Module>
diff --git a/src/calf/modules.h b/src/calf/modules.h
index 3be2c47..c1e53bd 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -33,30 +33,52 @@ using namespace dsp;
 
 class null_audio_module;
     
+/// Empty implementations for plugin functions. Note, that functions aren't virtual, because they're called via the particular
+/// subclass (flanger_audio_module etc) via template wrappers (ladspa_wrapper<> etc), not via base class
 class null_audio_module: public line_graph_iface
 {
 public:
+    /// Handle MIDI Note On
     inline void note_on(int note, int velocity) {}
+    /// Handle MIDI Note Off
     inline void note_off(int note, int velocity) {}
+    /// Handle MIDI Program Change
     inline void program_change(int program) {}
+    /// Handle MIDI Control Change
     inline void control_change(int controller, int value) {}
-    inline void pitch_bend(int value) {} // -8192 to 8191
+    /// Handle MIDI Pitch Bend
+    /// @param value pitch bend value (-8192 to 8191, defined as in MIDI ie. 8191 = 200 ct by default)
+    inline void pitch_bend(int value) {}
+    /// Called when params are changed (before processing)
     inline void params_changed() {}
-    inline void params_reset() {}
+    /// LADSPA-esque activate function, except it is called after ports are connected, not before
     inline void activate() {}
+    /// LADSPA-esque deactivate function
     inline void deactivate() {}
+    /// Set sample rate for the plugin
     inline void set_sample_rate(uint32_t sr) { }
+    /// Get "live" graph
     inline bool get_graph(int index, int subindex, float *data, int points, cairo_t *context) { return false; }
     inline static const char *get_gui_xml() { return NULL; }
+    /// Get "static" graph (one that is dependent on single parameter value and doesn't use other parameters or plugin internal state).
+    /// Used by waveform graphs.
     inline static bool get_static_graph(int index, int subindex, float value, float *data, int points, cairo_t *context) { return false; }
+    /// Return the NULL-terminated list of menu commands
     inline static plugin_command_info *get_commands() { return NULL; }
     /// does parameter number represent a CV port? (yes by default, except for synths)
     static bool is_cv(int param_no) { return true; }
     /// does parameter change cause an audible click?
     static bool is_noisy(int param_no) { return false; }
+    /// Execute menu command with given number
     inline void execute(int cmd_no) {}
+    /// DSSI configure call
     inline char *configure(const char *key, const char *value) { return NULL; }
+    /// Send all understood configure vars
     inline void send_configures(send_configure_iface *sci) {}
+    /// Reset all configure vars to initial values
+    inline void clear_configure_vars() {}
+    /// Reset parameter values for epp:trigger type parameters (ones activated by oneshot push button instead of check box)
+    inline void params_reset() {}
 };
 
 class amp_audio_module: public null_audio_module
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index 1a82670..5bbdc85 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -232,6 +232,8 @@ public:
     organ_audio_module()
     : drawbar_organ(&par_values)
     {
+        // that might be a bit early, but shouldn't matter in this particular case
+        clear_configure_vars();
     }
     static parameter_properties param_props[];
     static const char *get_gui_xml();
@@ -275,8 +277,9 @@ public:
     static const char *get_id() { return "organ"; }    
     static const char *get_label() { return "Organ"; }    
     static plugin_command_info *get_commands();
-    virtual char *configure(const char *key, const char *value);
-    virtual void send_configures(send_configure_iface *);
+    char *configure(const char *key, const char *value);
+    void send_configures(send_configure_iface *);
+    void clear_configure_vars() { configure("map_curve", "2\n0 1\n1 1\n"); }
 };
 
 };
diff --git a/src/dssigui.cpp b/src/dssigui.cpp
index 17a42af..2ba2d8f 100644
--- a/src/dssigui.cpp
+++ b/src/dssigui.cpp
@@ -174,6 +174,9 @@ struct plugin_proxy: public plugin_proxy_base, public line_graph_iface
         for (map<string, string>::iterator i = cfg_vars.begin(); i != cfg_vars.end(); i++)
             sci->send_configure(i->first.c_str(), i->second.c_str());
     }
+    void clear_preset() {
+        fprintf(stderr, "TODO: clear_preset (reset to init state) not implemented in DSSI GUIs\n");
+    }
 };
 
 plugin_proxy_base *create_plugin_proxy(const char *effect_name)
diff --git a/src/lv2gui.cpp b/src/lv2gui.cpp
index e7eb853..3f5d33a 100644
--- a/src/lv2gui.cpp
+++ b/src/lv2gui.cpp
@@ -133,6 +133,9 @@ struct plugin_proxy: public plugin_proxy_base, public line_graph_iface
     void send_configures(send_configure_iface *sci) { 
         fprintf(stderr, "TODO: send_configures (non-control port configuration dump) not implemented in LV2 GUIs\n");
     }
+    void clear_preset() {
+        fprintf(stderr, "TODO: clear_preset (reset to init state) not implemented in LV2 GUIs\n");
+    }
 };
 
 plugin_proxy_base *create_plugin_proxy(const char *effect_name)
diff --git a/src/preset.cpp b/src/preset.cpp
index 6eb70c7..42464ca 100644
--- a/src/preset.cpp
+++ b/src/preset.cpp
@@ -65,7 +65,10 @@ std::string plugin_preset::to_xml()
 
 void plugin_preset::activate(plugin_ctl_iface *plugin)
 {
-    map<string, int> names;
+    // First, clear everything to default values (in case some parameters or variables are missing)
+    plugin->clear_preset();
+
+    map<string, int> names;    
     int count = plugin->get_param_count();
     // this is deliberately done in two separate loops - if you wonder why, just think for a while :)
     for (int i = 0; i < count; i++)

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list