[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