[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)&params[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)&params[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)&params[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)&params[i]);
+            gtk_signal_connect (GTK_OBJECT (knob), "format-value", G_CALLBACK (hscale_format_value), (gpointer)&params[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)&params[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)&params[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