[SCM] calf/master: + LineGraph: allows for multiple overlapped line graph per parameter (no selection by parameter yet) + Monosynth: stereo filter response is plotted using "double" graphs

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:36:49 UTC 2013


The following commit has been merged in the master branch:
commit 98ff0746a8c3f58b22f31fda8d0fabcaaf5a3f53
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Thu Dec 27 11:58:30 2007 +0000

    + LineGraph: allows for multiple overlapped line graph per parameter (no selection by parameter yet)
    + Monosynth: stereo filter response is plotted using "double" graphs
    
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@47 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/src/calf/giface.h b/src/calf/giface.h
index 286e38b..16f9985 100644
--- a/src/calf/giface.h
+++ b/src/calf/giface.h
@@ -39,6 +39,10 @@
 #include "primitives.h"
 #include "preset.h"
 
+struct _cairo;
+    
+typedef struct _cairo cairo_t;
+    
 namespace synth {
 
 enum {
@@ -98,7 +102,7 @@ struct parameter_properties
 
 struct line_graph_iface
 {
-    virtual bool get_graph(int index, float *data, int points) = 0;
+    virtual bool get_graph(int index, int subindex, float *data, int points, cairo_t *context) = 0;
     virtual ~line_graph_iface() {}
 };
 
diff --git a/src/calf/modules.h b/src/calf/modules.h
index 202b006..4eb8a1f 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -42,7 +42,7 @@ public:
     inline void activate() {}
     inline void deactivate() {}
     inline void set_sample_rate(uint32_t sr) { }
-    inline bool get_graph(int index, float *data, int points) { return false; }
+    inline bool get_graph(int index, int subindex, float *data, int points, cairo_t *context) { return false; }
     inline static const char *get_gui_xml() { return NULL; }
 };
 
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index 2f7b87d..5d6e352 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -120,7 +120,7 @@ public:
     void calculate_buffer_ser();
     void calculate_buffer_single();
     void calculate_buffer_stereo();
-    bool get_graph(int index, float *data, int points);
+    bool get_graph(int index, int subindex, float *data, int points, cairo_t *context);
     inline bool is_stereo_filter() const
     {
         return filter_type == flt_2lp12 || filter_type == flt_2bp6;
diff --git a/src/custom_ctl.cpp b/src/custom_ctl.cpp
index 25dd423..7756bcf 100644
--- a/src/custom_ctl.cpp
+++ b/src/custom_ctl.cpp
@@ -14,7 +14,7 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
     
     cairo_t *c = gdk_cairo_create(GDK_DRAWABLE(widget->window));
 
-    GdkColor sc = { 0, 0, 0, 0 }, sc2 = { 0, 0, 65535, 0 };
+    GdkColor sc = { 0, 0, 0, 0 };
 
     gdk_cairo_set_source_color(c, &sc);
     cairo_rectangle(c, ox, oy, sx, sy);
@@ -22,11 +22,12 @@ calf_line_graph_expose (GtkWidget *widget, GdkEventExpose *event)
 
     if (lg->source) {
         float *data = new float[2 * sx];
-        if (lg->source->get_graph(lg->source_id, data, 2 * sx))
+        GdkColor sc2 = { 0, 0, 65535, 0 };
+        gdk_cairo_set_source_color(c, &sc2);
+        cairo_set_line_join(c, CAIRO_LINE_JOIN_MITER);
+        cairo_set_line_width(c, 1);
+        for(int gn = 0; lg->source->get_graph(lg->source_id, gn, data, 2 * sx, c); gn++)
         {
-            gdk_cairo_set_source_color(c, &sc2);
-            cairo_set_line_join(c, CAIRO_LINE_JOIN_MITER);
-            cairo_set_line_width(c, 1);
             for (int i = 0; i < 2 * sx; i++)
             {
                 int y = oy + sy / 2 - (sy / 2 - 1) * data[i];
diff --git a/src/monosynth.cpp b/src/monosynth.cpp
index b9cf98a..fd588f3 100644
--- a/src/monosynth.cpp
+++ b/src/monosynth.cpp
@@ -298,10 +298,12 @@ void monosynth_audio_module::activate() {
     waves[wave_test8].make(bl, data);
 }
 
-bool monosynth_audio_module::get_graph(int index, float *data, int points)
+bool monosynth_audio_module::get_graph(int index, int subindex, float *data, int points, cairo_t *context)
 {
     // printf("get_graph %d %p %d wave1=%d wave2=%d\n", index, data, points, wave1, wave2);
     if (index == par_wave1 || index == par_wave2) {
+        if (subindex)
+            return false;
         int wave = dsp::clip(dsp::fastf2i_drm(*params[index]), 0, (int)wave_count - 1);
 
         float *waveform = waves[wave].get_level(0);
@@ -312,13 +314,16 @@ bool monosynth_audio_module::get_graph(int index, float *data, int points)
     if (index == par_filtertype) {
         if (!running)
             return false;
+        if (subindex > (is_stereo_filter() ? 1 : 0))
+            return false;
         for (int i = 0; i < points; i++)
         {
             typedef complex<double> cfloat;
             double freq = 20.0 * pow (20000.0 / 20.0, i * 1.0 / points) * PI / srate;
             cfloat z = 1.0 / exp(cfloat(0.0, freq));
             
-            float level = abs((cfloat(filter.a0) + double(filter.a1) * z + double(filter.a2) * z*z) / (cfloat(1.0) + double(filter.b1) * z + double(filter.b2) * z*z));
+            biquad<float> &f = subindex ? filter2 : filter;
+            float level = abs((cfloat(f.a0) + double(f.a1) * z + double(f.a2) * z*z) / (cfloat(1.0) + double(f.b1) * z + double(f.b2) * z*z));
             if (!is_stereo_filter())
                 level *= abs((cfloat(filter2.a0) + double(filter2.a1) * z + double(filter2.a2) * z*z) / (cfloat(1.0) + double(filter2.b1) * z + double(filter2.b2) * z*z));
             level *= fgain;

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list