[SCM] calf/master: + calfjackhost: Better faders (based on hscale's value display instead of separate control) + organ: Leslie speed is controllable by hold pedal or mod wheel (just a sketch - no inertia) + organ: Leslie tweaks (needs a serious rewrite anyway), parameter tweaks (use new faders for harmonics)
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:36:43 UTC 2013
The following commit has been merged in the master branch:
commit bef57550d702112ed12ce0965f0538f4a4bbb9aa
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date: Thu Dec 13 21:15:06 2007 +0000
+ calfjackhost: Better faders (based on hscale's value display instead of separate control)
+ organ: Leslie speed is controllable by hold pedal or mod wheel (just a sketch - no inertia)
+ organ: Leslie tweaks (needs a serious rewrite anyway), parameter tweaks (use new faders for harmonics)
git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@15 78b06b96-2940-0410-b7fc-879d825d01d8
diff --git a/src/calf/organ.h b/src/calf/organ.h
index e2dc055..5fb65ff 100644
--- a/src/calf/organ.h
+++ b/src/calf/organ.h
@@ -194,10 +194,12 @@ struct drawbar_organ: public synth::basic_synth {
dsp::simple_flanger<float, 4096> chorus, chorus2;
dsp::biquad<float> crossover1, crossover2;
dsp::simple_delay<8, float> phaseshift;
+ float mwhl_value, hold_value;
drawbar_organ(organ_parameters *_parameters)
: parameters(_parameters)
, percussion(_parameters) {
+ mwhl_value = hold_value = 0.f;
}
void render_to(float *output[], int nsamples)
{
@@ -245,32 +247,43 @@ struct drawbar_organ: public synth::basic_synth {
chorus.set_wet(0.5f);chorus2.set_wet(0.5f);
chorus.set_dry(0.0f);chorus2.set_dry(0.0f);
percussion.setup(sr);
+ mwhl_value = hold_value = 0.f;
}
- void set_vibrato()
+ virtual void control_change(int ctl, int val)
{
- switch(parameters->get_vibrato_mode())
+ int mode = parameters->get_vibrato_mode();
+ if (mode == 3 && ctl == 64)
{
- case 1:
- chorus.set_min_delay(0.0061f);
- chorus2.set_min_delay(0.0085f);
- chorus.set_mod_depth(0.003f);
- chorus2.set_mod_depth(0.0035f);
- chorus.set_fb(0.3f);
- chorus2.set_fb(-0.3f);
- chorus.set_rate(40.0 / 60.0);
- chorus2.set_rate(48.0 / 60.0);
- break;
- case 2:
- chorus.set_min_delay(0.0061f);
- chorus2.set_min_delay(0.0085f);
- chorus.set_mod_depth(0.0014f);
- chorus2.set_mod_depth(0.0017f);
- chorus.set_fb(0.3f);
- chorus2.set_fb(-0.3f);
- chorus.set_rate(342.0 / 60.0);
- chorus2.set_rate(400.0 / 60.0);
- break;
+ hold_value = val / 127.f;
+ set_vibrato();
+ return;
+ }
+ if (mode == 4 && ctl == 1)
+ {
+ mwhl_value = val / 127.f;
+ set_vibrato();
+ return;
}
+ synth::basic_synth::control_change(ctl, val);
+ }
+ void set_vibrato()
+ {
+ int mode = parameters->get_vibrato_mode();
+ if (!mode)
+ return;
+ float speed = mode - 1;
+ if (mode == 3)
+ speed = hold_value;
+ if (mode == 4)
+ speed = mwhl_value;
+ chorus.set_mod_depth(0.002f - 0.0015f*speed);
+ chorus2.set_mod_depth(0.0025f - 0.002f*speed);
+ chorus.set_min_delay(0.0061f);
+ chorus2.set_min_delay(0.0085f);
+ chorus.set_rate((40.0 + (342 - 40)*speed) / 60.0);
+ chorus2.set_rate((48.0 + (400 - 48)*speed) / 60.0);
+ chorus.set_fb(0.3f);
+ chorus2.set_fb(-0.3f);
}
};
diff --git a/src/giface.cpp b/src/giface.cpp
index 2634e46..9246a94 100644
--- a/src/giface.cpp
+++ b/src/giface.cpp
@@ -45,10 +45,10 @@ float parameter_properties::from_01(float value01) const
value = min * pow(max / min, value01);
break;
case PF_SCALE_GAIN:
- if (value01 < 0.0001)
+ if (value01 < 0.00001)
value = min;
else {
- float rmin = 1.0f / 4096.0f;
+ float rmin = 1.0f / 1024.0f;
value = rmin * pow(max / rmin, value01);
}
break;
@@ -80,9 +80,9 @@ float parameter_properties::to_01(float value) const
value /= min;
return log(value) / log(max / min);
case PF_SCALE_GAIN:
- if (value < 1.0 / 4096.0)
+ if (value < 1.0 / 1024.0) // new bottom limit - 60 dB
return 0;
- float rmin = 1.0f / 4096.0f;
+ float rmin = 1.0f / 1024.0f;
value /= rmin;
return log(value) / log(max / rmin);
}
@@ -92,7 +92,13 @@ std::string parameter_properties::to_string(float value) const
{
char buf[32];
if ((flags & PF_SCALEMASK) == PF_SCALE_PERC) {
- sprintf(buf, "%g%%", 99.0 * value);
+ sprintf(buf, "%g%%", 100.0 * value);
+ return string(buf);
+ }
+ if ((flags & PF_SCALEMASK) == PF_SCALE_GAIN) {
+ if (value < 1.0 / 1024.0) // new bottom limit - 60 dB
+ return "-inf dB"; // XXXKF change to utf-8 infinity
+ sprintf(buf, "%0.1f dB", (float)(6 * log(value) / log(2)));
return string(buf);
}
sprintf(buf, "%g", value);
diff --git a/src/jackhost.cpp b/src/jackhost.cpp
index ac39b2b..f294a19 100644
--- a/src/jackhost.cpp
+++ b/src/jackhost.cpp
@@ -56,10 +56,13 @@ public:
jack_host_gui(GtkWidget *_toplevel);
void create(synth::jack_host_base *_host, const char *title);
+ GtkWidget *create_label(int param_idx);
static void hscale_value_changed(GtkHScale *widget, gpointer value);
+ static gchar *hscale_format_value(GtkScale *widget, double arg1, gpointer value);
static void combo_value_changed(GtkComboBox *widget, gpointer value);
static void toggle_value_changed(GtkCheckButton *widget, gpointer value);
+
#if USE_PHAT
static void knob_value_changed(PhatKnob *widget, gpointer value);
#endif
@@ -75,12 +78,24 @@ void jack_host_gui::hscale_value_changed(GtkHScale *widget, gpointer value)
{
jack_host_param *jhp = (jack_host_param *)value;
jack_host_base &jh = *jhp->gui->host;
- const parameter_properties &props = jh.get_param_props()[jhp->param_no];
int nparam = jhp->param_no;
+ const parameter_properties &props = jh.get_param_props()[nparam];
float cvalue = props.from_01 (gtk_range_get_value (GTK_RANGE (widget)));
jh.get_params()[nparam] = cvalue;
jh.set_params();
- gtk_label_set_text (GTK_LABEL (jhp->label), props.to_string(cvalue).c_str());
+ // gtk_label_set_text (GTK_LABEL (jhp->label), props.to_string(cvalue).c_str());
+}
+
+gchar *jack_host_gui::hscale_format_value(GtkScale *widget, double arg1, gpointer value)
+{
+ jack_host_param *jhp = (jack_host_param *)value;
+ jack_host_base &jh = *jhp->gui->host;
+ const parameter_properties &props = jh.get_param_props()[jhp->param_no];
+ float cvalue = props.from_01 (arg1);
+
+ // for testing
+ // return g_strdup_printf ("%s = %g", props.to_string (cvalue).c_str(), arg1);
+ return g_strdup (props.to_string (cvalue).c_str());
}
void jack_host_gui::combo_value_changed(GtkComboBox *widget, gpointer value)
@@ -116,6 +131,15 @@ void jack_host_gui::knob_value_changed(PhatKnob *widget, gpointer value)
}
#endif
+GtkWidget *jack_host_gui::create_label(int param_idx)
+{
+ GtkWidget *widget = gtk_label_new ("");
+ gtk_label_set_width_chars (GTK_LABEL (widget), 12);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
+ params[param_idx].label = widget;
+ return widget;
+}
+
void jack_host_gui::create(synth::jack_host_base *_host, const char *title)
{
host = _host;
@@ -136,7 +160,7 @@ void jack_host_gui::create(synth::jack_host_base *_host, const char *title)
for (int i = 0; i < param_count; i++) {
GtkWidget *label = gtk_label_new (host->get_param_names()[host->get_input_count() + host->get_output_count() + i]);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), label, 0, 1, i + 1, i + 2, GTK_FILL, GTK_SHRINK, 2, 2);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, i + 1, i + 2, GTK_FILL, GTK_FILL, 2, 2);
parameter_properties &props = host->get_param_props()[i];
@@ -160,34 +184,28 @@ void jack_host_gui::create(synth::jack_host_base *_host, const char *title)
gtk_signal_connect (GTK_OBJECT (widget), "toggled", G_CALLBACK (toggle_value_changed), (gpointer)¶ms[i]);
gtk_table_attach (GTK_TABLE (table), widget, 1, 3, i + 1, i + 2, GTK_EXPAND, GTK_SHRINK, 0, 0);
}
- else
- {
#if USE_PHAT
+ else if ((props.flags & PF_CTLMASK) != PF_CTL_FADER)
+ {
GtkWidget *knob = phat_knob_new_with_range (host->get_param_props()[i].to_01 (host->get_params()[i]), 0, 1, 0.01);
gtk_signal_connect (GTK_OBJECT (knob), "value-changed", G_CALLBACK (knob_value_changed), (gpointer)¶ms[i]);
gtk_table_attach (GTK_TABLE (table), knob, 1, 2, i + 1, i + 2, GTK_SHRINK, GTK_SHRINK, 0, 0);
-#else
+ gtk_table_attach (GTK_TABLE (table), create_label(i), 2, 3, i + 1, i + 2, (GtkAttachOptions)(GTK_SHRINK | GTK_FILL), GTK_SHRINK, 0, 0);
+ knob_value_changed (PHAT_KNOB (knob), (gpointer)¶ms[i]);
+ }
+#endif
+ else
+ {
+ gtk_misc_set_alignment (GTK_MISC (label), 1.0, 1.0);
+
GtkWidget *knob = gtk_hscale_new_with_range (0, 1, 0.01);
gtk_signal_connect (GTK_OBJECT (knob), "value-changed", G_CALLBACK (hscale_value_changed), (gpointer)¶ms[i]);
+ gtk_signal_connect (GTK_OBJECT (knob), "format-value", G_CALLBACK (hscale_format_value), (gpointer)¶ms[i]);
gtk_widget_set_size_request (knob, 200, -1);
- gtk_table_attach (GTK_TABLE (table), knob, 1, 2, i + 1, i + 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
-#endif
-
- widget = gtk_label_new ("");
- gtk_label_set_width_chars (GTK_LABEL (widget), 12);
- gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
- gtk_table_attach (GTK_TABLE (table), widget, 2, 3, i + 1, i + 2, (GtkAttachOptions)(GTK_SHRINK | GTK_FILL), GTK_SHRINK, 0, 0);
- params[i].label = widget;
- // gtk_widget_set_size_request (widget, widget->allocation.width, widget->allocation.height);
- // gtk_widget_set_size_request (widget, 100, 10);
+ gtk_table_attach (GTK_TABLE (table), knob, 1, 3, i + 1, i + 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
-#if USE_PHAT
- knob_value_changed (PHAT_KNOB (knob), (gpointer)¶ms[i]);
-#else
gtk_range_set_value (GTK_RANGE (knob), host->get_param_props()[i].to_01 (host->get_params()[i]));
- gtk_scale_set_draw_value (GTK_SCALE (knob), false);
hscale_value_changed (GTK_HSCALE (knob), (gpointer)¶ms[i]);
-#endif
}
}
gtk_container_add (GTK_CONTAINER (toplevel), table);
diff --git a/src/modules.cpp b/src/modules.cpp
index f752085..14e317d 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -109,23 +109,23 @@ const char *organ_audio_module::param_names[] = {"Out L", "Out R", "16'", "5 1/3
const char *organ_percussion_mode_names[] = { "Off", "Short", "Long" };
const char *organ_percussion_harmonic_names[] = { "2nd", "3rd" };
-const char *organ_vibrato_speed_names[] = { "Off", "Swell", "Tremolo" };
+const char *organ_vibrato_speed_names[] = { "Off", "Swell", "Tremolo", "HoldPedal", "ModWheel" };
parameter_properties organ_audio_module::param_props[] = {
- { 0.3, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0.3, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0.3, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
- { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_KNOB, NULL },
+ { 0.3, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0.3, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0.3, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
+ { 0, 0, 1, 1.01, PF_FLOAT | PF_SCALE_QUAD | PF_CTL_FADER, NULL },
{ 1, 0, 1, 1.01, PF_BOOL | PF_CTL_TOGGLE, NULL },
{ 1, 0, 2, 1.01, PF_ENUM | PF_CTL_COMBO, organ_percussion_mode_names },
{ 3, 2, 3, 1.01, PF_ENUM | PF_CTL_COMBO, organ_percussion_harmonic_names },
- { 1, 0, 2, 1.01, PF_ENUM | PF_CTL_COMBO, organ_vibrato_speed_names },
+ { 1, 0, 4, 1.01, PF_ENUM | PF_CTL_COMBO, organ_vibrato_speed_names },
{ 0.2, 0, 1, 1.01, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB, NULL },
};
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list