[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