diff --git a/plugins/ladspa_effect/calf/calf/audio_fx.h b/plugins/ladspa_effect/calf/calf/audio_fx.h index 56d08f6d6..bf61f9498 100644 --- a/plugins/ladspa_effect/calf/calf/audio_fx.h +++ b/plugins/ladspa_effect/calf/calf/audio_fx.h @@ -53,21 +53,21 @@ protected: gain_smoothing gs_wet, gs_dry; public: fixed_point phase, dphase; - float get_rate() { + float get_rate() const { return rate; } void set_rate(float rate) { this->rate = rate; dphase = rate/sample_rate*4096; } - float get_wet() { + float get_wet() const { return wet; } void set_wet(float wet) { this->wet = wet; gs_wet.set_inertia(wet); } - float get_dry() { + float get_dry() const { return dry; } void set_dry(float dry) { @@ -115,13 +115,13 @@ public: stages = 0; set_stages(6); } - float get_base_frq() { + float get_base_frq() const { return base_frq; } void set_base_frq(float _base_frq) { base_frq = _base_frq; } - int get_stages() { + int get_stages() const { return stages; } void set_stages(int _stages) { @@ -135,13 +135,13 @@ public: } stages = _stages; } - float get_mod_depth() { + float get_mod_depth() const { return mod_depth; } void set_mod_depth(float _mod_depth) { mod_depth = _mod_depth; } - float get_fb() { + float get_fb() const { return fb; } void set_fb(float fb) { @@ -196,7 +196,7 @@ public: *buf_out++ = sdry + swet; } } - float freq_gain(float freq, float sr) + float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; @@ -225,14 +225,14 @@ protected: float min_delay, mod_depth; sine_table sine; public: - float get_min_delay() { + float get_min_delay() const { return min_delay; } void set_min_delay(float min_delay) { this->min_delay = min_delay; this->min_delay_samples = (int)(min_delay * 65536.0 * sample_rate); } - float get_mod_depth() { + float get_mod_depth() const { return mod_depth; } void set_mod_depth(float mod_depth) { @@ -319,7 +319,7 @@ public: set_rate(get_rate()); set_min_delay(get_min_delay()); } - float get_fb() { + float get_fb() const { return fb; } void set_fb(float fb) { @@ -386,7 +386,7 @@ public: } last_delay_pos = delay_pos; } - float freq_gain(float freq, float sr) + float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; @@ -504,7 +504,7 @@ public: rdec[i]=exp(-float(tr[i] >> 16) / fDec); } } - float get_time() { + float get_time() const { return time; } void set_time(float time) { @@ -512,14 +512,14 @@ public: // fb = pow(1.0f/4096.0f, (float)(1700/(time*sr))); fb = 1.0 - 0.3 / (time * sr / 44100.0); } - float get_type() { + float get_type() const { return type; } void set_type(int type) { this->type = type; update_times(); } - float get_diffusion() { + float get_diffusion() const { return diffusion; } void set_diffusion(float diffusion) { @@ -531,7 +531,7 @@ public: this->diffusion = diffusion; update_times(); } - float get_fb() + float get_fb() const { return this->fb; } @@ -539,7 +539,7 @@ public: { this->fb = fb; } - float get_cutoff() { + float get_cutoff() const { return cutoff; } void set_cutoff(float cutoff) { @@ -604,7 +604,7 @@ public: virtual void filter_activate() = 0; virtual void sanitize() = 0; virtual int process_channel(uint16_t channel_no, float *in, float *out, uint32_t numsamples, int inmask) = 0; - virtual float freq_gain(int subindex, float freq, float srate) = 0; + virtual float freq_gain(int subindex, float freq, float srate) const = 0; virtual ~filter_module_iface() {} }; @@ -730,7 +730,7 @@ public: return filter[order - 1].empty() ? 0 : inmask; } - float freq_gain(int subindex, float freq, float srate) + float freq_gain(int subindex, float freq, float srate) const { float level = 1.0; for (int j = 0; j < order; j++) diff --git a/plugins/ladspa_effect/calf/calf/biquad.h b/plugins/ladspa_effect/calf/calf/biquad.h index e1f419508..99cf2a40a 100644 --- a/plugins/ladspa_effect/calf/calf/biquad.h +++ b/plugins/ladspa_effect/calf/calf/biquad.h @@ -305,7 +305,7 @@ public: /// Return the filter's gain at frequency freq /// @param freq Frequency to look up /// @param sr Filter sample rate (used to convert frequency to angular frequency) - float freq_gain(float freq, float sr) + float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; @@ -316,7 +316,7 @@ public: /// Return H(z) the filter's gain at frequency freq /// @param z Z variable (e^jw) - cfloat h_z(const cfloat &z) + cfloat h_z(const cfloat &z) const { return (cfloat(a0) + double(a1) * z + double(a2) * z*z) / (cfloat(1.0) + double(b1) * z + double(b2) * z*z); @@ -396,7 +396,7 @@ struct biquad_d1: public biquad_coeffs dsp::zero(x2); dsp::zero(y2); } - inline bool empty() { + inline bool empty() const { return (y1 == 0.f && y2 == 0.f); } @@ -448,7 +448,7 @@ struct biquad_d2: public biquad_coeffs } /// Is the filter state completely silent? (i.e. set to 0 by sanitize function) - inline bool empty() { + inline bool empty() const { return (w1 == 0.f && w2 == 0.f); } @@ -575,6 +575,74 @@ struct biquad_d1_lerp: public biquad_coeffs }; +/// Compose two filters in series +template +class filter_compose { +public: + typedef std::complex cfloat; + F1 f1; + F2 f2; +public: + float process(float value) { + return f2.process(f1.process(value)); + } + + inline cfloat h_z(const cfloat &z) const { + return f1.h_z(z) * f2.h_z(z); + } + + /// Return the filter's gain at frequency freq + /// @param freq Frequency to look up + /// @param sr Filter sample rate (used to convert frequency to angular frequency) + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); + } + + void sanitize() { + f1.sanitize(); + f2.sanitize(); + } +}; + +/// Compose two filters in parallel +template +class filter_sum { +public: + typedef std::complex cfloat; + F1 f1; + F2 f2; +public: + float process(float value) { + return f2.process(value) + f1.process(value); + } + + inline cfloat h_z(const cfloat &z) const { + return f1.h_z(z) + f2.h_z(z); + } + + /// Return the filter's gain at frequency freq + /// @param freq Frequency to look up + /// @param sr Filter sample rate (used to convert frequency to angular frequency) + float freq_gain(float freq, float sr) const + { + typedef std::complex cfloat; + freq *= 2.0 * M_PI / sr; + cfloat z = 1.0 / exp(cfloat(0.0, freq)); + + return std::abs(h_z(z)); + } + + void sanitize() { + f1.sanitize(); + f2.sanitize(); + } +}; + }; #endif diff --git a/plugins/ladspa_effect/calf/calf/giface.h b/plugins/ladspa_effect/calf/calf/giface.h index a41db4ca3..eace9027b 100644 --- a/plugins/ladspa_effect/calf/calf/giface.h +++ b/plugins/ladspa_effect/calf/calf/giface.h @@ -168,17 +168,17 @@ struct line_graph_iface /// @param context cairo context to adjust (for multicolour graphs etc.) /// @retval true graph data was returned; subindex+1 graph may or may not be available /// @retval false graph data was not returned; subindex+1 graph does not exist either - virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) { return false; } + virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { return false; } /// Obtain subindex'th dot of parameter 'index' /// @param index parameter/dot number (usually tied to particular plugin control port) /// @param subindex dot number (there may be multiple dots graphs for one parameter) - virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) { return false; } + virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { return false; } /// Obtain subindex'th dot of parameter 'index' /// @param index parameter/dot number (usually tied to particular plugin control port) /// @param subindex dot number (there may be multiple dots graphs for one parameter) - virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) { return false; } + virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return false; } /// Obtain subindex'th static graph of parameter index (static graphs are only dependent on parameter value, not plugin state) /// @param index parameter/graph number (usually tied to particular plugin control port) @@ -189,7 +189,7 @@ struct line_graph_iface /// @param context cairo context to adjust (for multicolour graphs etc.) /// @retval true graph data was returned; subindex+1 graph may or may not be available /// @retval false graph data was not returned; subindex+1 graph does not exist either - virtual bool get_static_graph(int index, int subindex, float value, float *data, int points, cairo_iface *context) { return false; } + virtual bool get_static_graph(int index, int subindex, float value, float *data, int points, cairo_iface *context) const { return false; } /// Return which graphs need to be redrawn and which can be cached for later reuse /// @param index Parameter/graph number (usually tied to particular plugin control port) @@ -198,7 +198,7 @@ struct line_graph_iface /// @param subindex_dot First dot that has to be redrawn /// @param subindex_gridline First gridline/legend that has to be redrawn /// @retval Current generation (to pass when calling the function next time); if different than passed generation value, call the function again to retrieve which graph offsets should be put into cache - virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) { subindex_graph = subindex_dot = subindex_gridline = 0; return 0; } + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = subindex_dot = subindex_gridline = 0; return 0; } /// Standard destructor to make compiler happy virtual ~line_graph_iface() {} @@ -229,22 +229,22 @@ struct table_column_info struct table_edit_iface { /// retrieve the table layout for specific parameter - virtual const table_column_info *get_table_columns(int param) = 0; + virtual const table_column_info *get_table_columns(int param) const = 0; /// return the current number of rows - virtual uint32_t get_table_rows(int param) = 0; + virtual uint32_t get_table_rows(int param) const = 0; /// retrieve data item from the plugin - virtual std::string get_cell(int param, int row, int column) { return calf_utils::i2s(row)+":"+calf_utils::i2s(column); } + virtual std::string get_cell(int param, int row, int column) const { return calf_utils::i2s(row)+":"+calf_utils::i2s(column); } /// set data item to the plugin - virtual void set_cell(int param, int row, int column, const std::string &src, std::string &error) { error.clear(); } + virtual void set_cell(int param, int row, int column, const std::string &src, std::string &error) const { error.clear(); } /// return a line graph interface for a specific parameter/column (unused for now) - virtual line_graph_iface *get_graph_iface(int param, int column) { return NULL; } + virtual const line_graph_iface *get_graph_iface(int param, int column) const { return NULL; } /// return an editor name for a specific grid cell (unused for now - I don't even know how editors be implemented) - virtual const char *get_cell_editor(int param, int column) { return NULL; } + virtual const char *get_cell_editor(int param, int column) const { return NULL; } virtual ~table_edit_iface() {} }; @@ -294,53 +294,53 @@ struct ladspa_plugin_info struct plugin_metadata_iface { /// @return plugin long name - virtual const char *get_name() = 0; + virtual const char *get_name() const = 0; /// @return plugin LV2 label - virtual const char *get_id() = 0; + virtual const char *get_id() const = 0; /// @return plugin human-readable label - virtual const char *get_label() = 0; + virtual const char *get_label() const = 0; /// @return total number of parameters - virtual int get_param_count() = 0; + virtual int get_param_count() const = 0; /// Return custom XML - virtual const char *get_gui_xml() = 0; + virtual const char *get_gui_xml() const = 0; /// @return number of audio inputs - virtual int get_input_count()=0; + virtual int get_input_count() const =0; /// @return number of audio outputs - virtual int get_output_count()=0; + virtual int get_output_count() const =0; /// @return number of optional inputs - virtual int get_inputs_optional()=0; + virtual int get_inputs_optional() const =0; /// @return number of optional outputs - virtual int get_outputs_optional()=0; + virtual int get_outputs_optional() const =0; /// @return true if plugin can work in hard-realtime conditions - virtual bool is_rt_capable()=0; + virtual bool is_rt_capable() const =0; /// @return true if plugin has MIDI input - virtual bool get_midi()=0; + virtual bool get_midi() const =0; /// @return true if plugin has MIDI input - virtual bool requires_midi()=0; + virtual bool requires_midi() const =0; /// @return port offset of first control (parameter) port (= number of audio inputs + number of audio outputs in all existing plugins as for 1 Aug 2008) - virtual int get_param_port_offset() = 0; + virtual int get_param_port_offset() const = 0; /// @return line_graph_iface if any - virtual line_graph_iface *get_line_graph_iface() = 0; + virtual const line_graph_iface *get_line_graph_iface() const = 0; /// @return table_edit_iface if any - virtual table_edit_iface *get_table_edit_iface() = 0; + virtual const table_edit_iface *get_table_edit_iface() const = 0; /// @return NULL-terminated list of menu commands - virtual plugin_command_info *get_commands() { return NULL; } + virtual plugin_command_info *get_commands() const { return NULL; } /// @return description structure for given parameter - virtual parameter_properties *get_param_props(int param_no) = 0; + virtual parameter_properties *get_param_props(int param_no) const = 0; /// @return retrieve names of audio ports (@note control ports are named in parameter_properties, not here) - virtual const char **get_port_names() = 0; + virtual const char **get_port_names() const = 0; /// @return description structure for the plugin - virtual const ladspa_plugin_info &get_plugin_info() = 0; + virtual const ladspa_plugin_info &get_plugin_info() const = 0; /// is a given parameter a control voltage? - virtual bool is_cv(int param_no) = 0; + virtual bool is_cv(int param_no) const = 0; /// is the given parameter non-interpolated? - virtual bool is_noisy(int param_no) = 0; + virtual bool is_noisy(int param_no) const = 0; /// does the plugin require message context? (or DSSI configure) may be slow - virtual bool requires_message_context() = 0; + virtual bool requires_message_context() const = 0; /// does the plugin require string port extension? (or DSSI configure) may be slow - virtual bool requires_string_ports() = 0; + virtual bool requires_string_ports() const = 0; /// add all message context parameter numbers to the ports vector - virtual void get_message_context_parameters(std::vector &ports) = 0; + virtual void get_message_context_parameters(std::vector &ports) const = 0; /// Do-nothing destructor to silence compiler warning virtual ~plugin_metadata_iface() {} @@ -377,8 +377,20 @@ struct plugin_ctl_iface: public virtual plugin_metadata_iface struct plugin_list_info_iface; -/// Get a list of all "large" (effect/synthesizer) plugins -extern void get_all_plugins(std::vector &plugins); +class plugin_registry +{ +public: + typedef std::vector plugin_vector; +private: + plugin_vector plugins; + plugin_registry(); +public: + static plugin_registry &instance(); + + const plugin_vector &get_all() { return plugins; } + plugin_metadata_iface *get_by_uri(const char *URI); +}; + /// Get a list of all "small" (module) plugins extern void get_all_small_plugins(plugin_list_info_iface *plii); /// Load and strdup a text file with GUI definition @@ -489,30 +501,30 @@ public: // These below are stock implementations based on enums and static members in Metadata classes // they may be overridden to provide more interesting functionality - const char *get_name() { return Metadata::impl_get_name(); } - const char *get_id() { return Metadata::impl_get_id(); } - const char *get_label() { return Metadata::impl_get_label(); } - int get_input_count() { return Metadata::in_count; } - int get_output_count() { return Metadata::out_count; } - int get_inputs_optional() { return Metadata::ins_optional; } - int get_outputs_optional() { return Metadata::outs_optional; } - int get_param_count() { return Metadata::param_count; } - bool get_midi() { return Metadata::support_midi; } - bool requires_midi() { return Metadata::require_midi; } - bool is_rt_capable() { return Metadata::rt_capable; } - line_graph_iface *get_line_graph_iface() { return dynamic_cast(this); } - table_edit_iface *get_table_edit_iface() { return dynamic_cast(this); } - int get_param_port_offset() { return Metadata::in_count + Metadata::out_count; } - const char *get_gui_xml() { static const char *data_ptr = calf_plugins::load_gui_xml(get_id()); return data_ptr; } - plugin_command_info *get_commands() { return NULL; } - parameter_properties *get_param_props(int param_no) { return ¶m_props[param_no]; } - const char **get_port_names() { return port_names; } - bool is_cv(int param_no) { return true; } - bool is_noisy(int param_no) { return false; } - const ladspa_plugin_info &get_plugin_info() { return plugin_info; } - bool requires_message_context() { return check_for_message_context_ports(param_props, Metadata::param_count); } - bool requires_string_ports() { return check_for_string_ports(param_props, Metadata::param_count); } - void get_message_context_parameters(std::vector &ports) { + const char *get_name() const { return Metadata::impl_get_name(); } + const char *get_id() const { return Metadata::impl_get_id(); } + const char *get_label() const { return Metadata::impl_get_label(); } + int get_input_count() const { return Metadata::in_count; } + int get_output_count() const { return Metadata::out_count; } + int get_inputs_optional() const { return Metadata::ins_optional; } + int get_outputs_optional() const { return Metadata::outs_optional; } + int get_param_count() const { return Metadata::param_count; } + bool get_midi() const { return Metadata::support_midi; } + bool requires_midi() const { return Metadata::require_midi; } + bool is_rt_capable() const { return Metadata::rt_capable; } + const line_graph_iface *get_line_graph_iface() const { return dynamic_cast(this); } + const table_edit_iface *get_table_edit_iface() const { return dynamic_cast(this); } + int get_param_port_offset() const { return Metadata::in_count + Metadata::out_count; } + const char *get_gui_xml() const { static const char *data_ptr = calf_plugins::load_gui_xml(get_id()); return data_ptr; } + plugin_command_info *get_commands() const { return NULL; } + parameter_properties *get_param_props(int param_no) const { return ¶m_props[param_no]; } + const char **get_port_names() const { return port_names; } + bool is_cv(int param_no) const { return true; } + bool is_noisy(int param_no) const { return false; } + const ladspa_plugin_info &get_plugin_info() const { return plugin_info; } + bool requires_message_context() const { return check_for_message_context_ports(param_props, Metadata::param_count); } + bool requires_string_ports() const { return check_for_string_ports(param_props, Metadata::param_count); } + void get_message_context_parameters(std::vector &ports) const { for (int i = 0; i < get_param_count(); ++i) { if (get_param_props(i)->flags & PF_PROP_MSGCONTEXT) ports.push_back(i); @@ -530,30 +542,30 @@ public: plugin_metadata_iface *impl; public: plugin_metadata_proxy(plugin_metadata_iface *_impl) { impl = _impl; } - const char *get_name() { return impl->get_name(); } - const char *get_id() { return impl->get_id(); } - const char *get_label() { return impl->get_label(); } - int get_input_count() { return impl->get_input_count(); } - int get_output_count() { return impl->get_output_count(); } - int get_inputs_optional() { return impl->get_inputs_optional(); } - int get_outputs_optional() { return impl->get_outputs_optional(); } - int get_param_count() { return impl->get_param_count(); } - bool get_midi() { return impl->get_midi(); } - bool requires_midi() { return impl->requires_midi(); } - bool is_rt_capable() { return impl->is_rt_capable(); } - line_graph_iface *get_line_graph_iface() { return impl->get_line_graph_iface(); } - table_edit_iface *get_table_edit_iface() { return impl->get_table_edit_iface(); } - int get_param_port_offset() { return impl->get_param_port_offset(); } - const char *get_gui_xml() { return impl->get_gui_xml(); } - plugin_command_info *get_commands() { return impl->get_commands(); } - parameter_properties *get_param_props(int param_no) { return impl->get_param_props(param_no); } - const char **get_port_names() { return impl->get_port_names(); } - bool is_cv(int param_no) { return impl->is_cv(param_no); } - bool is_noisy(int param_no) { return impl->is_noisy(param_no); } - const ladspa_plugin_info &get_plugin_info() { return impl->get_plugin_info(); } - bool requires_message_context() { return impl->requires_message_context(); } - bool requires_string_ports() { return impl->requires_string_ports(); } - void get_message_context_parameters(std::vector &ports) { impl->get_message_context_parameters(ports); } + const char *get_name() const { return impl->get_name(); } + const char *get_id() const { return impl->get_id(); } + const char *get_label() const { return impl->get_label(); } + int get_input_count() const { return impl->get_input_count(); } + int get_output_count() const { return impl->get_output_count(); } + int get_inputs_optional() const { return impl->get_inputs_optional(); } + int get_outputs_optional() const { return impl->get_outputs_optional(); } + int get_param_count() const { return impl->get_param_count(); } + bool get_midi() const { return impl->get_midi(); } + bool requires_midi() const { return impl->requires_midi(); } + bool is_rt_capable() const { return impl->is_rt_capable(); } + const line_graph_iface *get_line_graph_iface() const { return impl->get_line_graph_iface(); } + const table_edit_iface *get_table_edit_iface() const { return impl->get_table_edit_iface(); } + int get_param_port_offset() const { return impl->get_param_port_offset(); } + const char *get_gui_xml() const { return impl->get_gui_xml(); } + plugin_command_info *get_commands() const { return impl->get_commands(); } + parameter_properties *get_param_props(int param_no) const { return impl->get_param_props(param_no); } + const char **get_port_names() const { return impl->get_port_names(); } + bool is_cv(int param_no) const { return impl->is_cv(param_no); } + bool is_noisy(int param_no) const { return impl->is_noisy(param_no); } + const ladspa_plugin_info &get_plugin_info() const { return impl->get_plugin_info(); } + bool requires_message_context() const { return impl->requires_message_context(); } + bool requires_string_ports() const { return impl->requires_string_ports(); } + void get_message_context_parameters(std::vector &ports) const { impl->get_message_context_parameters(ports); } }; #define CALF_PORT_NAMES(name) template<> const char *::plugin_metadata::port_names[] diff --git a/plugins/ladspa_effect/calf/calf/ladspa_wrap.h b/plugins/ladspa_effect/calf/calf/ladspa_wrap.h index 73c396914..2f98dcf83 100644 --- a/plugins/ladspa_effect/calf/calf/ladspa_wrap.h +++ b/plugins/ladspa_effect/calf/calf/ladspa_wrap.h @@ -99,9 +99,9 @@ struct ladspa_instance: public Module, public plugin_ctl_iface virtual const char *get_gui_xml() { return Module::get_gui_xml(); } - virtual line_graph_iface *get_line_graph_iface() + virtual const line_graph_iface *get_line_graph_iface() const { - return dynamic_cast(this); + return dynamic_cast(this); } virtual bool activate_preset(int bank, int program) { return false; diff --git a/plugins/ladspa_effect/calf/calf/lv2wrap.h b/plugins/ladspa_effect/calf/calf/lv2wrap.h index 8d2f172c8..fcbff1023 100644 --- a/plugins/ladspa_effect/calf/calf/lv2wrap.h +++ b/plugins/ladspa_effect/calf/calf/lv2wrap.h @@ -96,28 +96,28 @@ struct lv2_instance: public plugin_ctl_iface, public progress_report_iface, publ virtual const char *get_gui_xml() { return Module::get_gui_xml(); } - virtual line_graph_iface *get_line_graph_iface() + virtual const line_graph_iface *get_line_graph_iface() const { - return dynamic_cast(this); + return dynamic_cast(this); } virtual bool activate_preset(int bank, int program) { return false; } - virtual const char *get_name() + virtual const char *get_name() const { return Module::get_name(); } - virtual const char *get_id() + virtual const char *get_id() const { return Module::get_id(); } - virtual const char *get_label() + virtual const char *get_label() const { return Module::get_label(); } - virtual int get_input_count() { return Module::in_count; } - virtual int get_output_count() { return Module::out_count; } - virtual bool get_midi() { return Module::support_midi; } + virtual int get_input_count() const { return Module::in_count; } + virtual int get_output_count() const { return Module::out_count; } + virtual bool get_midi() const { return Module::support_midi; } virtual float get_level(unsigned int port) { return 0.f; } virtual void execute(int cmd_no) { Module::execute(cmd_no); diff --git a/plugins/ladspa_effect/calf/calf/modmatrix.h b/plugins/ladspa_effect/calf/calf/modmatrix.h index e43e09f7a..5db95fc92 100644 --- a/plugins/ladspa_effect/calf/calf/modmatrix.h +++ b/plugins/ladspa_effect/calf/calf/modmatrix.h @@ -84,10 +84,10 @@ protected: mod_matrix(dsp::modulation_entry *_matrix, unsigned int _rows, const char **_src_names, const char **_dest_names); public: - virtual const table_column_info *get_table_columns(int param); - virtual uint32_t get_table_rows(int param); - virtual std::string get_cell(int param, int row, int column); - virtual void set_cell(int param, int row, int column, const std::string &src, std::string &error); + virtual const table_column_info *get_table_columns(int param) const; + virtual uint32_t get_table_rows(int param) const; + virtual std::string get_cell(int param, int row, int column) const; + virtual void set_cell(int param, int row, int column, const std::string &src, std::string &error) const; /// Process modulation matrix, calculate outputs from inputs inline void calculate_modmatrix(float *moddest, int moddest_count, float *modsrc) diff --git a/plugins/ladspa_effect/calf/calf/modules.h b/plugins/ladspa_effect/calf/calf/modules.h index ee8906772..b3ed83b89 100644 --- a/plugins/ladspa_effect/calf/calf/modules.h +++ b/plugins/ladspa_effect/calf/calf/modules.h @@ -65,8 +65,8 @@ public: class frequency_response_line_graph: public line_graph_iface { public: - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; class flanger_audio_module: public audio_module, public frequency_response_line_graph @@ -126,8 +126,8 @@ public: right.process(outs[1] + offset, ins[1] + offset, nsamples); return outputs_mask; // XXXKF allow some delay after input going blank } - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - float freq_gain(int subindex, float freq, float srate); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + float freq_gain(int subindex, float freq, float srate) const; }; class phaser_audio_module: public audio_module, public frequency_response_line_graph @@ -189,9 +189,9 @@ public: right.process(outs[1] + offset, ins[1] + offset, nsamples); return outputs_mask; // XXXKF allow some delay after input going blank } - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - float freq_gain(int subindex, float freq, float srate); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + float freq_gain(int subindex, float freq, float srate) const; }; class reverb_audio_module: public audio_module @@ -571,74 +571,6 @@ public: virtual void control_change(int ctl, int val); }; -/// Compose two filters in series -template -class filter_compose { -public: - typedef std::complex cfloat; - F1 f1; - F2 f2; -public: - float process(float value) { - return f2.process(f1.process(value)); - } - - cfloat h_z(const cfloat &z) { - return f1.h_z(z) * f2.h_z(z); - } - - /// Return the filter's gain at frequency freq - /// @param freq Frequency to look up - /// @param sr Filter sample rate (used to convert frequency to angular frequency) - float freq_gain(float freq, float sr) - { - typedef std::complex cfloat; - freq *= 2.0 * M_PI / sr; - cfloat z = 1.0 / exp(cfloat(0.0, freq)); - - return std::abs(h_z(z)); - } - - void sanitize() { - f1.sanitize(); - f2.sanitize(); - } -}; - -/// Compose two filters in parallel -template -class filter_sum { -public: - typedef std::complex cfloat; - F1 f1; - F2 f2; -public: - float process(float value) { - return f2.process(value) + f1.process(value); - } - - inline cfloat h_z(const cfloat &z) { - return f1.h_z(z) + f2.h_z(z); - } - - /// Return the filter's gain at frequency freq - /// @param freq Frequency to look up - /// @param sr Filter sample rate (used to convert frequency to angular frequency) - float freq_gain(float freq, float sr) - { - typedef std::complex cfloat; - freq *= 2.0 * M_PI / sr; - cfloat z = 1.0 / exp(cfloat(0.0, freq)); - - return std::abs(h_z(z)); - } - - void sanitize() { - f1.sanitize(); - f2.sanitize(); - } -}; - template class filter_module_with_inertia: public FilterClass { @@ -652,7 +584,7 @@ public: inertia inertia_cutoff, inertia_resonance, inertia_gain; once_per_n timer; bool is_active; - volatile int last_generation, last_calculated_generation; + mutable volatile int last_generation, last_calculated_generation; filter_module_with_inertia() : inertia_cutoff(exponential_ramp(128), 20) @@ -749,7 +681,7 @@ class filter_audio_module: public filter_module_with_inertia, public frequency_response_line_graph { - float old_cutoff, old_resonance, old_mode; + mutable float old_cutoff, old_resonance, old_mode; public: filter_audio_module() { @@ -778,8 +710,8 @@ public: inertia_filter_module::deactivate(); } - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// A multitap stereo chorus thing - processing @@ -840,10 +772,10 @@ public: void activate(); void deactivate(); void set_sample_rate(uint32_t sr); - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - float freq_gain(int subindex, float freq, float srate); - bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + float freq_gain(int subindex, float freq, float srate) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; }; class gain_reduction_audio_module { @@ -851,12 +783,12 @@ private: float linSlope, detected, kneeSqrt, kneeStart, linKneeStart, kneeStop; float compressedKneeStop, adjKneeStart, thres; float attack, release, threshold, ratio, knee, makeup, detection, stereo_link, bypass, mute, meter_out, meter_comp; - float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_mute, old_detection, old_stereo_link; - int last_generation; + mutable float old_threshold, old_ratio, old_knee, old_makeup, old_bypass, old_mute, old_detection, old_stereo_link; + mutable volatile int last_generation; uint32_t srate; bool is_active; - inline float output_level(float slope); - inline float output_gain(float linSlope, bool rms); + inline float output_level(float slope) const; + inline float output_gain(float linSlope, bool rms) const; public: gain_reduction_audio_module(); void set_params(float att, float rel, float thr, float rat, float kn, float mak, float det, float stl, float byp, float mu); @@ -867,10 +799,10 @@ public: void set_sample_rate(uint32_t sr); float get_output_level(); float get_comp_level(); - virtual bool get_graph(int subindex, float *data, int points, cairo_iface *context); - virtual bool get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context); - virtual bool get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - virtual int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + virtual bool get_graph(int subindex, float *data, int points, cairo_iface *context) const; + virtual bool get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const; + virtual bool get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + virtual int get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Compressor by Thor @@ -886,17 +818,17 @@ public: float *params[param_count]; uint32_t srate; bool is_active; - volatile int last_generation, last_calculated_generation; + mutable volatile int last_generation, last_calculated_generation; compressor_audio_module(); void activate(); void deactivate(); void params_changed(); void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Sidecain Compressor by Markus Schmidt (based on Thor's compressor and Krzysztof's filters) @@ -914,9 +846,10 @@ private: BANDPASS_1, BANDPASS_2 }; - float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old; - float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1; - CalfScModes sc_mode, sc_mode_old, sc_mode_old1; + mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old; + mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1; + CalfScModes sc_mode; + mutable CalfScModes sc_mode_old, sc_mode_old1; float f1_active, f2_active; uint32_t clip_in, clip_out; float meter_in, meter_out; @@ -929,12 +862,12 @@ public: float *params[param_count]; uint32_t srate; bool is_active; - volatile int last_generation, last_calculated_generation; + mutable volatile int last_generation, last_calculated_generation; sidechaincompressor_audio_module(); void activate(); void deactivate(); void params_changed(); - inline cfloat h_z(const cfloat &z) { + inline cfloat h_z(const cfloat &z) const { switch (sc_mode) { default: case WIDEBAND: @@ -958,7 +891,7 @@ public: } } - float freq_gain(int index, double freq, uint32_t sr) + float freq_gain(int index, double freq, uint32_t sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; @@ -968,10 +901,10 @@ public: } void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Multibandcompressor by Markus Schmidt @@ -996,10 +929,10 @@ public: void params_changed(); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); void set_sample_rate(uint32_t sr); - virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context); - virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + virtual bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + virtual bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + virtual bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + virtual int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Deesser by Markus Schmidt (based on Thor's compressor and Krzysztof's filters) @@ -1009,8 +942,8 @@ private: WIDE, SPLIT }; - float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old, f2_q_old; - float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1, f2_q_old1; + mutable float f1_freq_old, f2_freq_old, f1_level_old, f2_level_old, f2_q_old; + mutable float f1_freq_old1, f2_freq_old1, f1_level_old1, f2_level_old1, f2_q_old1; uint32_t detected_led; float detected, clip_out; uint32_t clip_led; @@ -1022,20 +955,20 @@ public: float *params[param_count]; uint32_t srate; bool is_active; - volatile int last_generation, last_calculated_generation; + mutable volatile int last_generation, last_calculated_generation; deesser_audio_module(); void activate(); void deactivate(); void params_changed(); - float freq_gain(int index, double freq, uint32_t sr) + float freq_gain(int index, double freq, uint32_t sr) const { return hpL.freq_gain(freq, sr) * pL.freq_gain(freq, sr); } void set_sample_rate(uint32_t sr); uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; /// Equalizer N Band by Markus Schmidt (based on Krzysztof's filters) @@ -1054,7 +987,7 @@ private: float ls_level_old, ls_freq_old; float hs_level_old, hs_freq_old; float p_level_old[PeakBands], p_freq_old[PeakBands], p_q_old[PeakBands]; - float old_params_for_graph[graph_param_count]; + mutable float old_params_for_graph[graph_param_count]; uint32_t clip_inL, clip_outL, clip_inR, clip_outR; float meter_inL, meter_outL, meter_inR, meter_outR; CalfEqMode hp_mode, lp_mode; @@ -1070,21 +1003,21 @@ public: float *params[param_count]; uint32_t srate; bool is_active; - volatile int last_generation, last_calculated_generation; + mutable volatile int last_generation, last_calculated_generation; equalizerNband_audio_module(); void activate(); void deactivate(); void params_changed(); - float freq_gain(int index, double freq, uint32_t sr); + float freq_gain(int index, double freq, uint32_t sr) const; void set_sample_rate(uint32_t sr) { srate = sr; } uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); - int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; + int get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const; }; typedef equalizerNband_audio_module equalizer5band_audio_module; @@ -1106,9 +1039,9 @@ public: void set_phase(float ph); void activate(); void deactivate(); - float get_value_from_phase(float ph, float off); - virtual bool get_graph(float *data, int points, cairo_iface *context); - virtual bool get_dot(float &x, float &y, int &size, cairo_iface *context); + float get_value_from_phase(float ph, float off) const; + virtual bool get_graph(float *data, int points, cairo_iface *context) const; + virtual bool get_dot(float &x, float &y, int &size, cairo_iface *context) const; }; /// Pulsator by Markus Schmidt @@ -1139,9 +1072,9 @@ public: } } uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask); - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); - bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context); - bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; + bool get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const; + bool get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const; }; /// Filterclavier --- MIDI controlled filter by Hans Baier @@ -1229,7 +1162,7 @@ public: } } - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; private: void adjust_gain_according_to_filter_mode(int velocity) { diff --git a/plugins/ladspa_effect/calf/calf/modules_synths.h b/plugins/ladspa_effect/calf/calf/modules_synths.h index 090acbdca..d57f61f7b 100644 --- a/plugins/ladspa_effect/calf/calf/modules_synths.h +++ b/plugins/ladspa_effect/calf/calf/modules_synths.h @@ -132,7 +132,7 @@ public: /// Run two filters (one per channel) to produce stereo output samples. void calculate_buffer_stereo(); /// Retrieve filter graph (which is 'live' so it cannot be generated by get_static_graph), or fall back to get_static_graph. - bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context); + bool get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const; /// @retval true if the filter 1 is to be used for the left channel and filter 2 for the right channel /// @retval false if filters are to be connected in series and sent (mono) to both channels inline bool is_stereo_filter() const @@ -140,9 +140,9 @@ public: return filter_type == flt_2lp12 || filter_type == flt_2bp6; } /// No CV inputs for now - bool is_cv(int param_no) { return false; } + bool is_cv(int param_no) const { return false; } /// Practically all the stuff here is noisy - bool is_noisy(int param_no) { return param_no != par_cutoff; } + bool is_noisy(int param_no) const { return param_no != par_cutoff; } /// Calculate control signals and produce step_size samples of output. void calculate_step(); /// Main processing function diff --git a/plugins/ladspa_effect/calf/calf/multichorus.h b/plugins/ladspa_effect/calf/calf/multichorus.h index 23a1f4fde..b954603ab 100644 --- a/plugins/ladspa_effect/calf/calf/multichorus.h +++ b/plugins/ladspa_effect/calf/calf/multichorus.h @@ -80,7 +80,7 @@ public: voice_depth = (unsigned int)((1U << 30) * 1.0 * scaling); } /// Get LFO value for given voice, returns a values in range of [-65536, 65535] (or close) - inline int get_value(uint32_t voice) { + inline int get_value(uint32_t voice) const { // find this voice's phase (= phase + voice * 360 degrees / number of voices) chorus_phase voice_phase = phase + vphase * (int)voice; // find table offset @@ -178,7 +178,7 @@ public: } post.sanitize(); } - float freq_gain(float freq, float sr) + float freq_gain(float freq, float sr) const { typedef std::complex cfloat; freq *= 2.0 * M_PI / sr; diff --git a/plugins/ladspa_effect/calf/calf/onepole.h b/plugins/ladspa_effect/calf/calf/onepole.h index 2bc23257b..5fdc66942 100644 --- a/plugins/ladspa_effect/calf/calf/onepole.h +++ b/plugins/ladspa_effect/calf/calf/onepole.h @@ -144,7 +144,7 @@ public: return out; } - inline bool empty() { + inline bool empty() const { return y1 == 0; } @@ -171,7 +171,7 @@ public: /// Return the filter's gain at frequency freq /// @param freq Frequency to look up /// @param sr Filter sample rate (used to convert frequency to angular frequency) - float freq_gain(float freq, float sr) + float freq_gain(float freq, float sr) const { freq *= 2.0 * M_PI / sr; cfloat z = 1.0 / exp(cfloat(0.0, freq)); @@ -181,7 +181,7 @@ public: /// Return H(z) the filter's gain at frequency freq /// @param z Z variable (e^jw) - cfloat h_z(const cfloat &z) + cfloat h_z(const cfloat &z) const { return (cfloat(a0) + double(a1) * z) / (cfloat(1.0) + double(b1) * z); } diff --git a/plugins/ladspa_effect/calf/src/giface.cpp b/plugins/ladspa_effect/calf/src/giface.cpp index bd71b2720..365f0fb17 100644 --- a/plugins/ladspa_effect/calf/src/giface.cpp +++ b/plugins/ladspa_effect/calf/src/giface.cpp @@ -292,6 +292,30 @@ void calf_plugins::set_channel_color(cairo_iface *context, int channel) context->set_line_width(1.5); } +/////////////////////////////////////////////////////////////////////////////////////// + +calf_plugins::plugin_registry &calf_plugins::plugin_registry::instance() +{ + static calf_plugins::plugin_registry registry; + return registry; +} + +plugin_metadata_iface *calf_plugins::plugin_registry::get_by_uri(const char *plugin_uri) +{ + static const char prefix[] = "http://calf.sourceforge.net/plugins/"; + if (strncmp(plugin_uri, prefix, sizeof(prefix) - 1)) + return NULL; + const char *label = plugin_uri + sizeof(prefix) - 1; + for (unsigned int i = 0; i < plugins.size(); i++) + { + if (!strcmp(plugins[i]->get_plugin_info().label, label)) + return plugins[i]; + } + return NULL; +} + +/////////////////////////////////////////////////////////////////////////////////////// + #if USE_DSSI struct osc_cairo_control: public cairo_iface { diff --git a/plugins/ladspa_effect/calf/src/modmatrix.cpp b/plugins/ladspa_effect/calf/src/modmatrix.cpp index cba6ced8b..c3bb4f762 100644 --- a/plugins/ladspa_effect/calf/src/modmatrix.cpp +++ b/plugins/ladspa_effect/calf/src/modmatrix.cpp @@ -59,17 +59,17 @@ mod_matrix::mod_matrix(modulation_entry *_matrix, unsigned int _rows, const char matrix[i].reset(); } -const table_column_info *mod_matrix::get_table_columns(int param) +const table_column_info *mod_matrix::get_table_columns(int param) const { return table_columns; } -uint32_t mod_matrix::get_table_rows(int param) +uint32_t mod_matrix::get_table_rows(int param) const { return matrix_rows; } -std::string mod_matrix::get_cell(int param, int row, int column) +std::string mod_matrix::get_cell(int param, int row, int column) const { assert(row >= 0 && row < (int)matrix_rows); modulation_entry &slot = matrix[row]; @@ -90,7 +90,7 @@ std::string mod_matrix::get_cell(int param, int row, int column) } } -void mod_matrix::set_cell(int param, int row, int column, const std::string &src, std::string &error) +void mod_matrix::set_cell(int param, int row, int column, const std::string &src, std::string &error) const { assert(row >= 0 && row < (int)matrix_rows); modulation_entry &slot = matrix[row]; diff --git a/plugins/ladspa_effect/calf/src/modules.cpp b/plugins/ladspa_effect/calf/src/modules.cpp index 1c6a939ff..ce74d5a17 100644 --- a/plugins/ladspa_effect/calf/src/modules.cpp +++ b/plugins/ladspa_effect/calf/src/modules.cpp @@ -889,7 +889,7 @@ CALF_PORT_PROPS(wavetable) = { //////////////////////////////////////////////////////////////////////////// -void calf_plugins::get_all_plugins(std::vector &plugins) +calf_plugins::plugin_registry::plugin_registry() { #define PER_MODULE_ITEM(name, isSynth, jackname) plugins.push_back(new name##_metadata); #define PER_SMALL_MODULE_ITEM(...) diff --git a/plugins/ladspa_effect/calf/src/modules_dsp.cpp b/plugins/ladspa_effect/calf/src/modules_dsp.cpp index d30672ca3..d7f03b025 100644 --- a/plugins/ladspa_effect/calf/src/modules_dsp.cpp +++ b/plugins/ladspa_effect/calf/src/modules_dsp.cpp @@ -33,12 +33,12 @@ using namespace calf_plugins; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -bool frequency_response_line_graph::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool frequency_response_line_graph::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return get_freq_gridline(subindex, pos, vertical, legend, context); } -int frequency_response_line_graph::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int frequency_response_line_graph::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = 0; subindex_dot = 0; @@ -67,7 +67,7 @@ void flanger_audio_module::deactivate() { is_active = false; } -bool flanger_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool flanger_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -79,7 +79,7 @@ bool flanger_audio_module::get_graph(int index, int subindex, float *data, int p return false; } -float flanger_audio_module::freq_gain(int subindex, float freq, float srate) +float flanger_audio_module::freq_gain(int subindex, float freq, float srate) const { return (subindex ? right : left).freq_gain(freq, srate); } @@ -108,7 +108,7 @@ void phaser_audio_module::deactivate() is_active = false; } -bool phaser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool phaser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -120,12 +120,12 @@ bool phaser_audio_module::get_graph(int index, int subindex, float *data, int po return false; } -float phaser_audio_module::freq_gain(int subindex, float freq, float srate) +float phaser_audio_module::freq_gain(int subindex, float freq, float srate) const { return (subindex ? right : left).freq_gain(freq, srate); } -bool phaser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool phaser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return get_freq_gridline(subindex, pos, vertical, legend, context); } @@ -150,7 +150,7 @@ void reverb_audio_module::set_sample_rate(uint32_t sr) /////////////////////////////////////////////////////////////////////////////////////////////// -bool filter_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool filter_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -161,7 +161,7 @@ bool filter_audio_module::get_graph(int index, int subindex, float *data, int po return false; } -int filter_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int filter_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (fabs(inertia_cutoff.get_last() - old_cutoff) + 100 * fabs(inertia_resonance.get_last() - old_resonance) + fabs(*params[par_mode] - old_mode) > 0.1f) { @@ -185,7 +185,7 @@ int filter_audio_module::get_changed_offsets(int index, int generation, int &sub /////////////////////////////////////////////////////////////////////////////////////////////// -bool filterclavier_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool filterclavier_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active || index != par_mode) { return false; @@ -268,7 +268,7 @@ void multichorus_audio_module::set_sample_rate(uint32_t sr) { right.setup(sr); } -bool multichorus_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool multichorus_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -284,7 +284,7 @@ bool multichorus_audio_module::get_graph(int index, int subindex, float *data, i return ::get_graph(*this, subindex, data, points); } if (index == par_rate && subindex < nvoices) { - sine_multi_lfo &lfo = left.lfo; + const sine_multi_lfo &lfo = left.lfo; for (int i = 0; i < points; i++) { float phase = i * 2 * M_PI / points; // original -65536 to 65535 value @@ -297,7 +297,7 @@ bool multichorus_audio_module::get_graph(int index, int subindex, float *data, i return false; } -bool multichorus_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) +bool multichorus_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { int voice = subindex >> 1; int nvoices = (int)*params[par_voices]; @@ -307,7 +307,7 @@ bool multichorus_audio_module::get_dot(int index, int subindex, float &x, float float unit = (1 - *params[par_overlap]); float scw = 1 + unit * (nvoices - 1); set_channel_color(context, subindex); - sine_multi_lfo &lfo = (subindex & 1 ? right : left).lfo; + const sine_multi_lfo &lfo = (subindex & 1 ? right : left).lfo; if (index == par_rate) { x = (double)(lfo.phase + lfo.vphase * voice) / 4096.0; @@ -324,7 +324,7 @@ bool multichorus_audio_module::get_dot(int index, int subindex, float &x, float return true; } -bool multichorus_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool multichorus_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (index == par_rate && !subindex) { @@ -337,7 +337,7 @@ bool multichorus_audio_module::get_gridline(int index, int subindex, float &pos, return false; } -float multichorus_audio_module::freq_gain(int subindex, float freq, float srate) +float multichorus_audio_module::freq_gain(int subindex, float freq, float srate) const { if (subindex == 2) return *params[par_amount] * left.post.freq_gain(freq, srate); @@ -677,7 +677,7 @@ uint32_t multibandcompressor_audio_module::process(uint32_t offset, uint32_t num // whatever has to be returned x) return outputs_mask; } -bool multibandcompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool multibandcompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { // let's handle by the corresponding strip switch (index) { @@ -697,7 +697,7 @@ bool multibandcompressor_audio_module::get_graph(int index, int subindex, float return false; } -bool multibandcompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) +bool multibandcompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { // let's handle by the corresponding strip switch (index) { @@ -717,8 +717,8 @@ bool multibandcompressor_audio_module::get_dot(int index, int subindex, float &x return false; } -bool multibandcompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) -{ +bool multibandcompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const +{ // let's handle by the corresponding strip switch (index) { case param_compression0: @@ -737,7 +737,7 @@ bool multibandcompressor_audio_module::get_gridline(int index, int subindex, flo return false; } -int multibandcompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int multibandcompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { // let's handle by the corresponding strip switch (index) { @@ -884,28 +884,28 @@ uint32_t compressor_audio_module::process(uint32_t offset, uint32_t numsamples, // whatever has to be returned x) return outputs_mask; } -bool compressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool compressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; return compressor.get_graph(subindex, data, points, context); } -bool compressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) +bool compressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; return compressor.get_dot(subindex, x, y, size, context); } -bool compressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool compressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) return false; return compressor.get_gridline(subindex, pos, vertical, legend, context); } -int compressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int compressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) return false; @@ -1202,7 +1202,7 @@ uint32_t sidechaincompressor_audio_module::process(uint32_t offset, uint32_t num // whatever has to be returned x) return outputs_mask; } -bool sidechaincompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool sidechaincompressor_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -1215,7 +1215,7 @@ bool sidechaincompressor_audio_module::get_graph(int index, int subindex, float return false; } -bool sidechaincompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) +bool sidechaincompressor_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; @@ -1225,7 +1225,7 @@ bool sidechaincompressor_audio_module::get_dot(int index, int subindex, float &x return false; } -bool sidechaincompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool sidechaincompressor_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) return false; @@ -1237,7 +1237,7 @@ bool sidechaincompressor_audio_module::get_gridline(int index, int subindex, flo // return false; } -int sidechaincompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int sidechaincompressor_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) return false; @@ -1451,7 +1451,7 @@ uint32_t deesser_audio_module::process(uint32_t offset, uint32_t numsamples, uin // whatever has to be returned x) return outputs_mask; } -bool deesser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool deesser_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -1462,14 +1462,14 @@ bool deesser_audio_module::get_graph(int index, int subindex, float *data, int p return false; } -bool deesser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool deesser_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { return get_freq_gridline(subindex, pos, vertical, legend, context); // return false; } -int deesser_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int deesser_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) { return false; @@ -1576,11 +1576,11 @@ void gain_reduction_audio_module::process(float &left, float &right, float det_l } } -float gain_reduction_audio_module::output_level(float slope) { +float gain_reduction_audio_module::output_level(float slope) const { return slope * output_gain(slope, false) * makeup; } -float gain_reduction_audio_module::output_gain(float linSlope, bool rms) { +float gain_reduction_audio_module::output_gain(float linSlope, bool rms) const { //this calculation is also thor's work if(linSlope > (rms ? adjKneeStart : linKneeStart)) { float slope = log(linSlope); @@ -1637,7 +1637,7 @@ float gain_reduction_audio_module::get_comp_level() { return meter_comp; } -bool gain_reduction_audio_module::get_graph(int subindex, float *data, int points, cairo_iface *context) +bool gain_reduction_audio_module::get_graph(int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -1662,7 +1662,7 @@ bool gain_reduction_audio_module::get_graph(int subindex, float *data, int point return true; } -bool gain_reduction_audio_module::get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) +bool gain_reduction_audio_module::get_dot(int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; @@ -1681,7 +1681,7 @@ bool gain_reduction_audio_module::get_dot(int subindex, float &x, float &y, int return false; } -bool gain_reduction_audio_module::get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool gain_reduction_audio_module::get_gridline(int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { bool tmp; vertical = (subindex & 1) != 0; @@ -1700,7 +1700,7 @@ bool gain_reduction_audio_module::get_gridline(int subindex, float &pos, bool &v return result; } -int gain_reduction_audio_module::get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int gain_reduction_audio_module::get_changed_offsets(int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { subindex_graph = 0; subindex_dot = 0; @@ -1988,7 +1988,7 @@ uint32_t equalizerNband_audio_module::process(uint32_t offs #undef SET_IF_CONNECTED template -bool equalizerNband_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool equalizerNband_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -2000,7 +2000,7 @@ bool equalizerNband_audio_module::get_graph(int index, int } template -bool equalizerNband_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) +bool equalizerNband_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (!is_active) { return false; @@ -2010,7 +2010,7 @@ bool equalizerNband_audio_module::get_gridline(int index, i } template -int equalizerNband_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) +int equalizerNband_audio_module::get_changed_offsets(int index, int generation, int &subindex_graph, int &subindex_dot, int &subindex_gridline) const { if (!is_active) { return false; @@ -2042,7 +2042,7 @@ int equalizerNband_audio_module::get_changed_offsets(int in return false; } -static inline float adjusted_lphp_gain(float **params, int param_active, int param_mode, biquad_d2 filter, float freq, float srate) +static inline float adjusted_lphp_gain(const float *const *params, int param_active, int param_mode, const biquad_d2 &filter, float freq, float srate) { if(*params[param_active] > 0.f) { float gain = filter.freq_gain(freq, srate); @@ -2059,7 +2059,7 @@ static inline float adjusted_lphp_gain(float **params, int param_active, int par } template -float equalizerNband_audio_module::freq_gain(int index, double freq, uint32_t sr) +float equalizerNband_audio_module::freq_gain(int index, double freq, uint32_t sr) const { float ret = 1.f; if (use_hplp) @@ -2104,7 +2104,7 @@ float lfo_audio_module::get_value() return get_value_from_phase(phase, offset) * amount; } -float lfo_audio_module::get_value_from_phase(float ph, float off) +float lfo_audio_module::get_value_from_phase(float ph, float off) const { float val = 0.f; float phs = ph + off; @@ -2171,7 +2171,7 @@ void lfo_audio_module::set_params(float f, int m, float o, uint32_t sr, float a) amount = a; } -bool lfo_audio_module::get_graph(float *data, int points, cairo_iface *context) +bool lfo_audio_module::get_graph(float *data, int points, cairo_iface *context) const { if (!is_active) return false; @@ -2182,7 +2182,7 @@ bool lfo_audio_module::get_graph(float *data, int points, cairo_iface *context) return true; } -bool lfo_audio_module::get_dot(float &x, float &y, int &size, cairo_iface *context) +bool lfo_audio_module::get_dot(float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) return false; @@ -2377,7 +2377,8 @@ uint32_t pulsator_audio_module::process(uint32_t offset, uint32_t numsamples, ui // whatever has to be returned x) return outputs_mask; } -bool pulsator_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) + +bool pulsator_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { if (!is_active) { return false; @@ -2393,7 +2394,8 @@ bool pulsator_audio_module::get_graph(int index, int subindex, float *data, int } return false; } -bool pulsator_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) + +bool pulsator_audio_module::get_dot(int index, int subindex, float &x, float &y, int &size, cairo_iface *context) const { if (!is_active) { return false; @@ -2410,7 +2412,8 @@ bool pulsator_audio_module::get_dot(int index, int subindex, float &x, float &y, } return false; } -bool pulsator_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) + +bool pulsator_audio_module::get_gridline(int index, int subindex, float &pos, bool &vertical, std::string &legend, cairo_iface *context) const { if (index == param_freq && !subindex) { diff --git a/plugins/ladspa_effect/calf/src/monosynth.cpp b/plugins/ladspa_effect/calf/src/monosynth.cpp index 33b24f3ae..6d76134ad 100644 --- a/plugins/ladspa_effect/calf/src/monosynth.cpp +++ b/plugins/ladspa_effect/calf/src/monosynth.cpp @@ -204,7 +204,7 @@ void monosynth_audio_module::precalculate_waves(progress_report_iface *reporter) } -bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) +bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_iface *context) const { monosynth_audio_module::precalculate_waves(NULL); // printf("get_graph %d %p %d wave1=%d wave2=%d\n", index, data, points, wave1, wave2); @@ -239,7 +239,7 @@ bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int typedef complex cfloat; double freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points); - dsp::biquad_d1_lerp &f = subindex ? filter2 : filter; + const dsp::biquad_d1_lerp &f = subindex ? filter2 : filter; float level = f.freq_gain(freq, srate); if (!is_stereo_filter()) level *= filter2.freq_gain(freq, srate);